在一个包含大量3D移动物体的大型OpenGL游戏中,这些点通常如何更新?

时间:2012-02-03 22:29:41

标签: opengl 3d

  1. 使用自己的物理引擎计算的点,然后每次必须显示时发送到OpenGL,例如使用glBufferSubDataArb,使用更新的飞桶坐标

  2. 有很多具有相同世界坐标的桶,但不知何故,每个桶都告诉OpenGL使用不同的矩阵变换。当一个桶移动时,你会以某种方式更新它的变换矩阵,以反映它在世界中旋转/翻译的方式。

  3. 其他方式

  4. 另外,如果答案是#2,那么有没有简单的方法,例如使用抽象代码而不是自己操纵矩阵

1 个答案:

答案 0 :(得分:5)

OpenGL不是场景图,它是一个绘图API。最新版本的OpenGL(OpenGL-3核心及以上版本)通过不管理矩阵状态来反映这一点。的确,答案是2,或多或少。实际上你应该处理矩阵数学。 OpenGL-3不再为此提供任何原语。

通常物理引擎将物体视为具有凸壳的刚体。表示这样的身体的自然方式是使用4×3矩阵(3×3旋转矩阵和平移向量)。因此,如果使用物理引擎,无论如何都要提供这样的矩阵。

此外,您必须了解OpenGL不会维护场景,因此您无需“更新”。您只需使用OpenGL绘制数据。矩阵在需要时加载。