math - 在 3D 空间中存储方向的快速有效方法?

标签 math opengl 3d rotation orientation

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

为了对模型 View 矩阵堆栈应用正确的变换,我使用这三个向量组成了仿射变换矩阵。

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

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

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

最佳答案

I originally stored an objects origin and orientation in 3D space using 3 vectors representing the objects origin, forward and up directions.

或者换句话说:您正在存储一个 3×3 矩阵。 OpenGL 使用的矩阵是一样的,虽然它们是 4×4,但与你的唯一区别是,元素 4,4 始终为 1,元素 0...3,4 均为 0,并且第一列 0,0...3 是 forward 和 up 的叉积,通常称为 right

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

另一种方法是将四元数 与偏移向量一起使用。但是,如果您希望您的对象是可翻译的,则必须将四元数转换为矩阵(或者您可以为转换层次结构链接大量平移/旋转对,但使用矩阵实际上会减少开销)。

关于math - 在 3D 空间中存储方向的快速有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10503963/

相关文章:

javascript - 在 AFrame.io 中创建大量立方体的简洁方法

swift - SpriteKit 和 SceneKit – 如何完全暂停游戏?

c# - 在平面上获取随机 vector3

c - 求解 C 中的超越方程

c++ - 如何使用 OpenGL 2.0 而不是更高版本?

C++ OpenGL 绘制一个房间

c++ - 如何获得更精确的鼠标移动

c# - 数组添加奇数

C#:如何对整数进行四舍五入的简单数学运算?

delphi - 强制配备 nVidia Optimus 的系统为我的应用程序使用真正的 GPU?