0

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

有没有我没有注意到的常见陷阱,对我来说,任何能够制作 VBO 的人都应该能够制作 indexArray-buffer ...

以下代码在 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);

然后是render routine中的基本思想

    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);

请帮忙?:) 尼尔斯

4

1 回答 1

0

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

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

尼尔斯

附言。谢谢拉森先生。

于 2012-07-28T17:13:36.507 回答