快速有效地在3D空间中存储方向?

kbi*_*irk 1 opengl math 3d rotation orientation

我最初使用表示对象原点,向前和向上方向的3个向量在3D空间中存储对象原点和方向.

为了应用于模型视图矩阵堆栈的正确变换,我使用这三个向量组成仿射变换矩阵.

平移是微不足道的,但是通过构造正确的旋转矩阵(取决于角度和旋转轴)并将其应用于这3个矢量来应用旋转.

我正在将此方法用于大量对象,并且旋转/仿射矩阵组合正在导致性能瓶颈.

我想知道是否有更明智/有效的方式存储方向?

dat*_*olf 5

我最初使用表示对象原点,向前和向上方向的3个向量在3D空间中存储对象原点和方向.

换句话说:你正在存储3×3矩阵.OpenGL使用的矩阵是相同的,虽然它们是4×4,但唯一的区别是,元素4,4总是1,元素0 ... 3,4都是0,并且第一列0,0 ... 3是向前和向上的叉积,通常称为.

这实际上是表示3D空间中对象放置的最简洁且可直接访问的方式.您可以通过执行单个矩阵乘法来应用任何类型的变换.

另一种方法是使用四元数和偏移向量.但是如果你想让你的对象可以翻译,那么四元数必须变成一个矩阵(或者你可以为转换层次链接很多平移/旋转配对,但是使用矩阵实际上会减少开销).

  • +1问题的具体程度不足以说明什么操作构成了瓶颈.对于某些类型的操作(例如,仅渲染),完整矩阵将是最有效的.对于其他人(例如,刚体物理模拟),四元数可能是. (2认同)