浅解cocos2d-x中的CCSprite绘制原理

来源:互联网 发布:最好网络投资理财 编辑:程序博客网 时间:2024/04/28 12:07

cocos2d-x版本为2.0.4

此画图调用的是opengl es 2.0版本,支持三角形画图。故必须有一个顶点数组。此定义定义在CCSprite.h中

ccV3F_C4B_T2F_Quad m_sQuad;

而这个顶点数组的定义为

复制代码
//! 4 ccVertex3FTex2FColor4Btypedef 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     // vertex18     int diff = offsetof( ccV3F_C4B_T2F, vertices);19     glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, kQuadSize, (void*) (offset + diff));20 21     // texCoods22     diff = offsetof( ccV3F_C4B_T2F, texCoords);23     glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, kQuadSize, (void*)(offset + diff));24 25     // color26     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两个三角形,这样就画出我们想展示的图形

原创粉丝点击