【发布时间】:2011-06-02 07:56:05
【问题描述】:
我的问题似乎很简单,但我就是不明白背后的原因:
- 我有一个用 glBufferSubData 填充的顶点和索引缓冲区。有几个网格被一一填充到这个大 VBO 及其对应的 IBO 中
- 然后我尝试用 glDrawElements 一个一个地渲染那些小网格
问题是,只有第一个网格被渲染 - 并且多次 - 在每个不同的网格应该存在的地方!!!
以下信息可能有用:
我以这种方式创建 VBO
gl.glGenBuffers(1, buffers_, 0);
gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, buffers_[0]);
gl.glBufferData(GL11.GL_ARRAY_BUFFER, sizeInBytes, null, GL11.GL_DYNAMIC_DRAW);
然后每个网格像这样填充到VBO中
gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, name);
gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, startOffsetInBytes, numBytesToCopy, nioBuffer);
并且网格是以这种方式渲染的
- 绑定 VBO/IBO 并设置适当的客户端状态
- 然后设置顶点、法线和 texcoord“指针” - 它们指向 VBO 的开头加上它们在顶点“结构”中的偏移量
- 并致电
gl.glDrawElements(GL10.GL_TRIANGLES, indicesNum, GL10.GL_UNSIGNED_SHORT, startIndexOffsetInBytes); - 最后,取消绑定 VBO/IBO 并禁用客户端状态
我调试了代码,我确定sizeInBytes、startOffsetInBytes、numBytesToCopy 和startIndexOffsetInBytes 是正确的值(以字节为单位:)))和indicesNum 是索引/顶点的数量网格(渲染)。
一个可疑的地方是设置顶点/法线/texcoord 指针——它们只设置一次——并设置到 VBO 的开头。也许我需要在每次调用 glDrawElements 之前设置它们?
【问题讨论】:
标签: opengl-es indexing offset vbo