cocos2d-x版本为2.0.4
此画图调用的是opengl es 2.0版本,支持三角形画图。故必须有一个顶点数组。此定义定义在CCSprite.h中
ccV3F_C4B_T2F_Quad m_sQuad;
而这个顶点数组的定义为
//! 4 ccVertex3FTex2FColor4B
typedef struct _ccV3F_C4B_T2F_Quad
{
//! top left
ccV3F_C4B_T2F tl;
//! bottom left
ccV3F_C4B_T2F bl;
//! top right
ccV3F_C4B_T2F tr;
//! bottom right
ccV3F_C4B_T2F br;
} ccV3F_C4B_T2F_Quad;
顶点分布如图所示
Cocos2d-x的画图均在自身节点的draw(void)下面。
1 // m_pobTexture 为当前CCSprite绑定的纹理图
2 if (m_pobTexture != NULL)
3 {
4 ccGLBindTexture2D( m_pobTexture->getName() );
5 }
6 else
7 {
8 ccGLBindTexture2D(0);
9 }
10
11 //启用顶点数组画图模式
12 ccGLEnableVertexAttribs( kCCVertexAttribFlag_PosColorTex );
13 //设置每个顶点数的大小
14 #define kQuadSize sizeof(m_sQuad.bl)
15 long offset = (long)&m_sQuad;
16
17 // vertex
18 int diff = offsetof( ccV3F_C4B_T2F, vertices);
19 glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, kQuadSize, (void*) (offset + diff));
20
21 // texCoods
22 diff = offsetof( ccV3F_C4B_T2F, texCoords);
23 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, kQuadSize, (void*)(offset + diff));
24
25 // color
26 diff = offsetof( ccV3F_C4B_T2F, colors);
27 glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, kQuadSize, (void*)(offset + diff));
28
29 //这一步为确认画图,根据当前绑定的纹理图,然后根据当前的顶点数组进行画图
30 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
GL_TRIANGLE_STRIP
- OpenGL 的使用将最开始的两个顶点出发,然后遍历每个顶点,这些顶点将使用前2个顶点一起组成一个三角形。
所以画图的顺序为 V0-V1-V2 及 V1-V2-V3两个三角形,这样就画出我们想展示的图形