Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
最好是创建新的VBO或只是交换数据?(OpenGL)_Opengl_Vertex Buffer - Fatal编程技术网

最好是创建新的VBO或只是交换数据?(OpenGL)

最好是创建新的VBO或只是交换数据?(OpenGL),opengl,vertex-buffer,Opengl,Vertex Buffer,因此,在OpenGL渲染应用程序中,在应用程序的整个生命周期中创建和维护顶点缓冲区,并用glBufferData交换每一帧的数据,通常更好,还是删除VBO并在每一帧重新创建它更好 直觉告诉我最好交换数据,但我看到的一些示例程序会做后者,所以我有点困惑 我读过Nvidia关于VBOs的白皮书,但由于我是opengl的新手,它没有什么意义 提前感谢您的建议因为您在每一帧生成一组全新的数据,文档似乎表明这是正确的处理方式。VBO的重要意义在于,它们是存储在图形内存中而不是计算机主内存中的渲染数据缓冲区

因此,在OpenGL渲染应用程序中,在应用程序的整个生命周期中创建和维护顶点缓冲区,并用glBufferData交换每一帧的数据,通常更好,还是删除VBO并在每一帧重新创建它更好

直觉告诉我最好交换数据,但我看到的一些示例程序会做后者,所以我有点困惑

我读过Nvidia关于VBOs的白皮书,但由于我是opengl的新手,它没有什么意义


提前感谢您的建议

因为您在每一帧生成一组全新的数据,文档似乎表明这是正确的处理方式。

VBO的重要意义在于,它们是存储在图形内存中而不是计算机主内存中的渲染数据缓冲区。这使得它们的使用效率非常高,因为每次更新数据时,计算机都必须将(可能是大量)数据从主内存传输到图形内存,这很慢

因此,理想的情况是将所有必需的渲染数据一次性放入VBOs,然后仅通过OpenGL函数(如矩阵变换)或着色器对其进行操作

例如,将每个网格的世界空间坐标和纹理坐标放入VBOs中,并且不再直接接触它们;您可以使用modelview矩阵、照明功能和着色器来渲染它们

您可以做更多的工作来优化VBO的使用,但这是我所理解的基础

请在此处找到一些好提示和更多详细信息: