代码之家  ›  专栏  ›  技术社区  ›  user1556463

iOS ES 2从RAM渲染正常,VBO中的verts正常,但BO中的索引失败

  •  0
  • user1556463  · 技术社区  · 14 年前

    我正在扩展Xcode opengles模板,去掉了虚拟es1的东西。 现在我设法从RAM中渲染了我的模型vertex数组和indexArray, 然后我设法生成、绑定、dataBuffer vertex数组VBO,并将常规RAM指针更改为偏移指针。 这一切都很好,但将indexAray放置在BO和gen-、bind-、dataBuffer中并将RAM指针更改为偏移指针的下一阶段失败了:(

    有没有我没有注意到的常见陷阱,对我来说,任何能够制作VBO的人都应该能够制作indexArray缓冲区。。。

    以下代码在setupGL中完成

        glGenBuffers(1, &geometryPtr->vertexBuffer);
        glBindBuffer(GL_ARRAY_BUFFER, geometryPtr->vertexBuffer);
        glBufferData(GL_ARRAY_BUFFER, sizeof(geometryPtr->vertexNormalUV), geometryPtr->vertexNormalUV, GL_STATIC_DRAW);
        //
        glGenBuffers(1, &geometryPtr->vertexIndicesBuffer);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, geometryPtr->vertexIndicesBuffer);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(geometryPtr->indices), geometryPtr->indices, GL_STATIC_DRAW);
    

    然后是渲染例程中的基本思想

        glBindBuffer(GL_ARRAY_BUFFER, geometryPtr->vertexBuffer);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, geometryPtr->vertexIndicesBuffer);
        glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(0));
        glEnableVertexAttribArray(GLKVertexAttribPosition);
        glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(12));
        glEnableVertexAttribArray(GLKVertexAttribNormal);
        glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_TRUE, 32, BUFFER_OFFSET(24));
        glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
        //
        glDrawElements(GL_TRIANGLES, trianglesCount*3, GL_UNSIGNED_SHORT, (void *)offset);
        glDrawElements(GL_TRIANGLE_STRIP, triangleStripOffsets[m], GL_UNSIGNED_SHORT, (void *)offset);
    

    请帮忙?:) 尼尔斯

    1 回复  |  直到 14 年前
        1
  •  0
  •   user1556463    14 年前

    我已经在评论中回答了这个问题,根据拉森先生的建议,我将提供一个(官方)答案来结束这个问题。

    为了进一步避免,我基本上假设sizeof()会让系统要求系统内存管理器询问分配给指针send的大小。。。

    尼尔斯

    心理学。 谢谢拉森先生。