因此,在OpenGL渲染应用程序中,通常最好在应用程序的整个生命周期中创建和维护顶点缓冲区,并且只需使用glBufferData每帧交换数据,或者更好的方法是删除VBO并重新创建它每一帧?
Intuition告诉我更换数据会更好,但我见过的一些示例程序是后者,所以我有点困惑。
我读过Nvidia关于VBO的白皮书,但由于我是opengl的新手,所以它没有多大意义。
提前感谢和建议
答案 0 :(得分:5)
由于您每帧都在生成一组全新的数据,因此文档似乎表明GL_STREAM_DRAW
是正确的方法。
答案 1 :(得分:0)
VBO的重要之处在于它们是渲染数据缓冲区,存储在图形内存中,而不是存储在计算机的主内存中。这使得它们的使用非常有效,因为它们中的数据没有经常更新,因为每次这样做,计算机将不得不将(可能是大量的)数据从主存储器传输到图形存储器 - 这很慢
所以理想的情况是将所有必需的渲染数据放入VBO中一次,然后只通过矩阵变换或着色器等OpenGL函数对它们进行操作。
所以你会...将每个网格的世界空间坐标和纹理坐标放入VBO中,永远不要再直接触摸它们;你可以使用模型视图矩阵,光照函数和着色器来渲染它们。
您可以采取更多措施来优化VBO的使用,但这是我理解它们的基础知识。
在此处查找一些好的提示和更多详细信息:How do I use OpenGL 3.x VBOs to render a dynamic world?