Opengl 如何有效地使用VBOs
我正在努力学习OpenGl,所以我读了一些关于有效使用顶点缓冲区对象的教程/文本。起初我认为渲染东西最简单的方法是每个对象使用一个VBO,但我认为,至少对于静态对象,只使用一个大型VBO更有效 OpenGL wiki: 。。。最好将多个对象放入一个VBO中,并尝试减少对glBindBuffer和glVertexPointer以及其他GL函数的调用次数 所以我基本上有一个巨大的VBO和一个IBO,并使用glBufferSubData添加数据。对于每个对象或我在某处存储顶点和索引偏移的任何对象,如果我想绘制一个特定的对象,我使用GLDrawerElementsBaseVertex 我的问题是,如果我想删除数据,我不知道该怎么办。我可以把它放在那里,但那似乎不对 或者我可以调用glBufferData 使用空指针,然后重新加载所有其他对象 我能想象的第三件事是实现某种内存管理,它跟踪VBO中的漏洞并用新对象重新填充它们Opengl 如何有效地使用VBOs,opengl,Opengl,我正在努力学习OpenGl,所以我读了一些关于有效使用顶点缓冲区对象的教程/文本。起初我认为渲染东西最简单的方法是每个对象使用一个VBO,但我认为,至少对于静态对象,只使用一个大型VBO更有效 OpenGL wiki: 。。。最好将多个对象放入一个VBO中,并尝试减少对glBindBuffer和glVertexPointer以及其他GL函数的调用次数 所以我基本上有一个巨大的VBO和一个IBO,并使用glBufferSubData添加数据。对于每个对象或我在某处存储顶点和索引偏移的任何对象,如果
有没有更好的方法来处理这个问题?这可能取决于具体情况。我在想一个类似于大型游戏世界的东西,在这个世界中,一切都是静态的,但当你朝一个方向移动时,你不再需要来自相反方向的数据。首先,我将使用VBOs处理一切:静态和动态。只需使用正确的提示GL\u STATIC\u DRAW或GL\u DYNAMIC\u DRAW
其次,与其使用一个巨大的VBO来保存状态更改,我建议您在每个网格上使用VBO,但在渲染之前实现某种网格批处理,以减少状态更改。这样就不必担心数据中有任何漏洞。您可以对VBO和IBO使用相同的缓冲区,使其更好。