我正在扩展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);
请帮忙?:)
尼尔斯