Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
C++ 填充VBO的最佳方法是什么?_C++_Arrays_Opengl_Vbo_Vertex - Fatal编程技术网

C++ 填充VBO的最佳方法是什么?

C++ 填充VBO的最佳方法是什么?,c++,arrays,opengl,vbo,vertex,C++,Arrays,Opengl,Vbo,Vertex,我正在使用OpenGL渲染两个网格,这些网格存储在一个名为CMesh的类的对象中。CMesh包含许多由CVertex对象和三角形表示的顶点。每个CVertex包含一个向量及其位置。 由于顶点位置在渲染过程中不断发生变化,因此每次渲染网格时都必须重写VBO数据数组。虽然与其他大型游戏相比,我没有那么多的顶点,但这会极大地降低整个程序的速度。 有更好的方法吗?假设您使用的是GL_STATIC_绘图,您可以将其改为使用GL_DYNAMIC_绘图,这不会使程序速度降低。或者,在GPU上计算对象的新位置也

我正在使用OpenGL渲染两个网格,这些网格存储在一个名为CMesh的类的对象中。CMesh包含许多由CVertex对象和三角形表示的顶点。每个CVertex包含一个向量及其位置。
由于顶点位置在渲染过程中不断发生变化,因此每次渲染网格时都必须重写VBO数据数组。虽然与其他大型游戏相比,我没有那么多的顶点,但这会极大地降低整个程序的速度。

有更好的方法吗?

假设您使用的是GL_STATIC_绘图,您可以将其改为使用GL_DYNAMIC_绘图,这不会使程序速度降低。或者,在GPU上计算对象的新位置也是一种值得研究的可能性。

使用变形目标或至少使用带有多个骨骼的蒙皮网格。这比手动更新每个顶点要好得多

为什么要不断更改顶点位置而不是使用平移?它们是动画的。平移、旋转。。。通过为着色器提供一个附加矩阵来完成。请参阅@Florian:如果要通过着色器中的矩阵进行变换。。。为什么必须重写缓冲区对象数据?@Nicolas着色器中的变换是针对整个对象的,而重写是因为逐顶点动画