【问题标题】:iPhone OpenGL ES1 VBO Texture Coordinate IssuesiPhone OpenGL ES1 VBO 纹理坐标问题
【发布时间】:2012-10-12 01:11:58
【问题描述】:

我将代码切换为使用 VBO,突然我的精灵(2 个三角形三角形条)的纹理坐标不好。

禁用 VBO 使问题消失。

注意 - 我将我的顶点和纹理坐标数据对齐到此链接中指定的 4 个字节: https://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html

这是顶点数据的打印输出,内容如下: x, y, z, 0.0f, tu, tv, 0.0f, 0.0f

    Vertex 0 -0.500000 0.500000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 
    Vertex 1 -0.500000 -0.500000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    Vertex 2 0.500000 0.500000 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 
    Vertex 3 0.500000 -0.500000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 

这就是我生成 VBO 的方式:

m_numVertices = 4
m_stride = 8

glGenBuffers( 1, &m_vboVertices); // Generate our Vertex Buffer Object
glBindBuffer( GL_ARRAY_BUFFER, m_vboVertices); // Bind our Vertex Buffer Object
glBufferData( GL_ARRAY_BUFFER, (m_numVertices * m_stride) * sizeof(float), m_pVertexData, GL_STATIC_DRAW); // Set the size and data of our VBO and set it to STATIC_DRAW
glBindBuffer( GL_ARRAY_BUFFER, 0 );

glGenBuffers( 1, &m_vboIndices );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_vboIndices );
glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof(GLubyte)*4, m_pIndices, GL_STATIC_DRAW );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );

这就是我渲染精灵的方式:

glBindBuffer(GL_ARRAY_BUFFER, m_vboVertices);
glVertexPointer( 3, GL_FLOAT, byteStride, BUFFER_OFFSET(0) );
glTexCoordPointer( 2, GL_FLOAT, byteStride, BUFFER_OFFSET(4) );
glBindBuffer(GL_ARRAY_BUFFER,0); // reset

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vboIndices );
glDrawElements(GL_TRIANGLE_STRIP, m_numVertices, GL_UNSIGNED_BYTE, BUFFER_OFFSET(0));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); // reset

BUFFER_OFFSET 定义为:

#define BUFFER_OFFSET(i) ((char *)NULL + (i))

使用 VBO:

没有 VBO:

谢谢。

编辑 - 在对代码进行了一些处理之后,使用 GL_TRIANGLES 进行绘图时似乎也会出现此问题。

【问题讨论】:

    标签: iphone opengl-es vbo texture-mapping


    【解决方案1】:

    看来问题在于我没有以字节为单位计算 glTexCoordPointer 偏移量。应该是:

    glTexCoordPointer( 2, GL_FLOAT, byteStride, (char*)NULL + (4*sizeof(float)) );
    

    宏 BUFFER_OFFSET 不正确。

    应用此修复程序解决了问题。

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 2017-05-28
      • 1970-01-01
      • 2014-05-15
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多