2010-07-30 70 views
5

所以在OpenGL渲染应用程序中,在应用程序的整个生命周期中创建和维护一个顶点缓冲区通常会更好,只需用glBufferData替换每一帧数据;或者更好地删除VBO并重新创建它的每一帧?直觉告诉我换掉数据更好,但是我见过的一些示例程序对后者有用,所以我有点困惑。更好地创建新的VBO或只交换数据? (OpenGL)

我读过VBOs上的Nvidia白皮书,但是因为我是opengl的新手,所以没有多少意义。

预先感谢和建议

回答

5

既然你产生了一整套新一帧数据的文件似乎表明GL_STREAM_DRAW是正确的方式去了解的东西。

0

关于VBOs的重要之处在于它们呈现的数据缓冲区存储在图形内存中,而不是存储在计算机的主内存中。这使得它们的使用非常高效,因为它们中的数据不会更频繁地更新,因为每当你这样做时,计算机将不得不将数据从主存储器传输到图形存储器 - 这是很慢的。

所以理想的情况是将所有需要的渲染数据放入VBO中,然后只通过OpenGL函数(如矩阵转换或着色器)操作它们。

所以你会例如将每个网格的世界空间坐标和纹理坐标放入VBO中,并且不要再直接触摸它们;你会使用模型视图矩阵,光照函数和着色器来渲染它们。

你可以做更多来优化VBO的使用,但这是我理解他们的基础知识。

在这里找到一些很好的提示和更多细节:How do I use OpenGL 3.x VBOs to render a dynamic world?