Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 如何有效地使用VBOs_Opengl - Fatal编程技术网

Opengl 如何有效地使用VBOs

Opengl 如何有效地使用VBOs,opengl,Opengl,我正在努力学习OpenGl,所以我读了一些关于有效使用顶点缓冲区对象的教程/文本。起初我认为渲染东西最简单的方法是每个对象使用一个VBO,但我认为,至少对于静态对象,只使用一个大型VBO更有效 OpenGL wiki: 。。。最好将多个对象放入一个VBO中,并尝试减少对glBindBuffer和glVertexPointer以及其他GL函数的调用次数 所以我基本上有一个巨大的VBO和一个IBO,并使用glBufferSubData添加数据。对于每个对象或我在某处存储顶点和索引偏移的任何对象,如果

我正在努力学习OpenGl,所以我读了一些关于有效使用顶点缓冲区对象的教程/文本。起初我认为渲染东西最简单的方法是每个对象使用一个VBO,但我认为,至少对于静态对象,只使用一个大型VBO更有效

OpenGL wiki:

。。。最好将多个对象放入一个VBO中,并尝试减少对glBindBuffer和glVertexPointer以及其他GL函数的调用次数

所以我基本上有一个巨大的VBO和一个IBO,并使用glBufferSubData添加数据。对于每个对象或我在某处存储顶点和索引偏移的任何对象,如果我想绘制一个特定的对象,我使用GLDrawerElementsBaseVertex

我的问题是,如果我想删除数据,我不知道该怎么办。我可以把它放在那里,但那似乎不对

或者我可以调用glBufferData​ 使用空指针,然后重新加载所有其他对象

我能想象的第三件事是实现某种内存管理,它跟踪VBO中的漏洞并用新对象重新填充它们


有没有更好的方法来处理这个问题?这可能取决于具体情况。我在想一个类似于大型游戏世界的东西,在这个世界中,一切都是静态的,但当你朝一个方向移动时,你不再需要来自相反方向的数据。

首先,我将使用VBOs处理一切:静态和动态。只需使用正确的提示GL\u STATIC\u DRAW或GL\u DYNAMIC\u DRAW


其次,与其使用一个巨大的VBO来保存状态更改,我建议您在每个网格上使用VBO,但在渲染之前实现某种网格批处理,以减少状态更改。这样就不必担心数据中有任何漏洞。

您可以对VBO和IBO使用相同的缓冲区,使其更好。