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

pet*_*ete 1 opengl 3d

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

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

  3. 其他一些方式

此外,如果答案是#2,是否有任何简单的方法可以做到这一点,例如使用抽象代码而不是自己操纵矩阵

dat*_*olf 5

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

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

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