Java 使用不推荐的glTranslatef或使用glBufferSubData更新坐标是否更好?

Java 使用不推荐的glTranslatef或使用glBufferSubData更新坐标是否更好?,java,opengl,lwjgl,Java,Opengl,Lwjgl,我想移动我的VBO,我想知道是应该使用glBufferSubData更新整个VBO的值,还是只使用不推荐的glTranslatef来移动我的东西 如果我只是更新VBO中的值,我应该为顶点、法线和纹理坐标使用单独的VBO,还是将它们全部放在一个VBO中 谢谢。1:通常您应该尽量减少CPU和GPU之间传输的数据量,以保持最大性能 因此,应避免使用glBufferSubData()更新整个顶点缓冲区,并且应尽可能长,并应使用诸如glTranslate()和glLoadMatrix()或着色器等转换 但

我想移动我的VBO,我想知道是应该使用
glBufferSubData
更新整个VBO的值,还是只使用不推荐的
glTranslatef
来移动我的东西

如果我只是更新VBO中的值,我应该为顶点、法线和纹理坐标使用单独的VBO,还是将它们全部放在一个VBO中


谢谢。

1:通常您应该尽量减少CPU和GPU之间传输的数据量,以保持最大性能

因此,应避免使用glBufferSubData()更新整个顶点缓冲区,并且应尽可能长,并应使用诸如glTranslate()和glLoadMatrix()或着色器等转换

但是,由于您已经在使用VBOs,我建议您使用着色器统一变量和glUniformMatrix()使用着色器进行转换

2:分离顶点、法线和纹理坐标或将它们组合到一个VBO中取决于您。在大多数情况下,我将它们组合在一起,因为它只生成一个句柄,并且我只需要一个glBufferData()调用。但是,如果只有一个部分(如纹理坐标)被更新,其余部分保持不变,那么分离会更好,因为您也可以单独更新它们

更先进的是: 如果使用缓冲区隔行扫描,显然必须将它们组合起来。
有时使用缓冲区隔行扫描比不使用缓冲区隔行扫描更快,因为单个顶点所需的数据保存在一起,并且可以使用缓存。但是您必须尝试一下这对性能有什么影响(如果有的话),因为这在很大程度上取决于您使用的硬件。

谢谢。我将学习如何使用着色器,而不是使用不推荐使用的函数和
glBufferSubData
,因为我无论如何都需要它。另外,分离VBO可能是最好的主意,因为有时只有顶点或纹理坐标需要更新。我会首先探索是否可以在着色器中进行此操作,或者先在内存中准备好变量缓冲区:)