我的问题似乎很简单,但我无法理解其背后的原因:
问题是,只有第一个网格被渲染 - 并且多次 - 在每个不同网格应该出现的地方!
以下信息可能有用:
我以这种方式创建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);
网格在这个时代呈现
gl.glDrawElements(GL10.GL_TRIANGLES, indicesNum, GL10.GL_UNSIGNED_SHORT, startIndexOffsetInBytes);
我调试了代码,我确信sizeInBytes
,startOffsetInBytes
,numBytesToCopy
和startIndexOffsetInBytes
是正确的值(以字节为单位:)))和{{1是网格中的索引/顶点数(要渲染)。
一个可疑的地方是设置顶点/普通/ texcoord指针 - 它们只设置一次 - 并设置为VBO的开头。也许我需要在每次调用glDrawElements之前设置它们?
答案 0 :(得分:1)
:D找到了原因。我描述的一切都是正确的。问题是网格被添加到VBO / IBO的方式 - 每个新网格的索引从0重新启动!!因此,只有VBO中的第一个网格被渲染。