Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es OpenGL ES:glBufferSubData将网格填充到VBO/IBO中,然后GLDrainElements仅渲染第一个网格而不是所有网格_Opengl Es_Indexing_Offset_Vbo - Fatal编程技术网

Opengl es OpenGL ES:glBufferSubData将网格填充到VBO/IBO中,然后GLDrainElements仅渲染第一个网格而不是所有网格

Opengl es OpenGL ES:glBufferSubData将网格填充到VBO/IBO中,然后GLDrainElements仅渲染第一个网格而不是所有网格,opengl-es,indexing,offset,vbo,Opengl Es,Indexing,Offset,Vbo,我的问题似乎很简单,但我就是不明白背后的原因: 我有一个顶点和一个索引缓冲区,用glBufferSubData填充。有几个网格被一个接一个地填充到这个大VBO及其相应的IBO中 然后我试着一个接一个地用GLD元素渲染这些小网格 问题是,只有第一个网格被渲染——并且多次渲染——在每个不同网格应该被渲染的地方 以下信息可能有用: 我这样创建VBO gl.glGenBuffers(1, buffers_, 0); gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, buff

我的问题似乎很简单,但我就是不明白背后的原因:

  • 我有一个顶点和一个索引缓冲区,用glBufferSubData填充。有几个网格被一个接一个地填充到这个大VBO及其相应的IBO中
  • 然后我试着一个接一个地用GLD元素渲染这些小网格
问题是,只有第一个网格被渲染——并且多次渲染——在每个不同网格应该被渲染的地方

以下信息可能有用:

我这样创建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.glpaurements(GL10.gl_三角形,indicenum,GL10.gl_UNSIGNED_SHORT,startIndexOffsetInBytes)
  • 最后,取消绑定VBO/IBO并禁用客户端状态
我调试了代码,我确信
sizeInBytes
startoffsetingbytes
numbytes-stocopy
startindexoffsetingbytes
是正确的值(字节:),
indicenum
是网格中的索引/顶点数(要渲染)


一个可疑的地方是设置顶点/法线/texcoord指针-它们只设置一次-并设置为VBO的开头。也许我需要在每次调用gldrawerelements之前设置它们?

:D发现了这个原因。我所描述的一切都是正确的。问题在于将网格添加到VBO/IBO中的方式-每个新网格的索引都从0重新启动!!因此,只有VBO中的第一个网格被渲染。

:D发现了这个原因。我所描述的一切都是正确的。问题在于将网格添加到VBO/IBO中的方式-每个新网格的索引都从0重新启动!!因此,只有VBO中的第一个网格被渲染。

我遇到了类似的问题,但我的解决方案不同,我必须确保使用GLVERTEXATTRIBCPOINTER在VAOs中添加偏移量。否则,它将只渲染添加的第一个网格。你的回答给了我一个可能的提示,因此我仅为此感谢你:)我有一个类似的问题,但我的解决方案不同,我必须确保使用glvertexattributepointer在VAOs中添加偏移量。否则,它将只渲染添加的第一个网格。你的回答给了我一个暗示,这可能是什么,所以我仅为此感谢你:)