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

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两个三角形,这样就画出我们想展示的图形

转载于:https://www.cnblogs.com/tickdream/archive/2012/12/11/2812994.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值