关于CCTexure2D使用opengl实现绘制的原理分析

本文介绍了Cocos2D-x中CCTexure2D类的drawAtPoint方法,该方法通过OpenGL函数实现图元在指定位置的绘制。详细解析了绘制过程中使用的顶点坐标与纹理坐标数组,以及OpenGL的VertexAttribPointer函数参数说明。
CCTexure2D中在指定的位置中绘制图元的如下示例代码:
cocos2D-x中CCNode的画图函数
void CCTexture2D::drawAtPoint(const CCPoint& point)
  {
  GLfloat coordinates[] = { 
  0.0f, m_fMaxT,
  m_fMaxS,m_fMaxT,
  0.0f, 0.0f,
  m_fMaxS,0.0f };
GLfloat width = (GLfloat)m_uPixelsWide * m_fMaxS,
  height = (GLfloat)m_uPixelsHigh * m_fMaxT;
GLfloat vertices[] = { 
  point.x, point.y,
  width + point.x, point.y,
  point.x, height + point.y,
  width + point.x, height + point.y };
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords );
  m_pShaderProgram->use();
  m_pShaderProgram->setUniformsForBuiltins();
ccGLBindTexture2D( m_uName );

  glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
  glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, coordinates);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
  }

OpenGL函数。
void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,const GLvoid * pointer);
参数:
pointer
指定一个指针,指向数组中第一个顶点属性的第一个组件。初始值为0。
stride
指定连续顶点属性之间的偏移量。如果为0,那么顶点属性会被理解为:它们是紧密排列在一起的。初始值为0。
normalized
指定当被访问时,固定点数据值是否应该被归一化(GL_TRUE)或者直接转换为固定点值(GL_FALSE)。
type
指定数组中每个组件的数据类型。可用的符号常量有GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT,GL_UNSIGNED_SHORT, GL_FIXED, 和 GL_FLOAT,初始值为GL_FLOAT。
size
指定每个顶点属性的组件数量。必须为1、2、3或者4。初始值为4。(梦维:如position是由3个(x,y,z)组成,而颜色是4个(r,g,b,a))
index
指定要修改的顶点属性的索引值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值