在回答真正的 (1) 问题时,3D 数学比您想象的要复杂得多。
暂时忽略四元数,矩阵可以被认为是:-
Rx Ry Rz 0
Ux Uy Uz 0
Ax Ay Az 0
Px Py Pz 1
或者它可能是上述的转置,这取决于你如何设置系统,但最终它真的没有什么区别,而且很大程度上取决于你的硬件。 R 是右轴,U 是上轴,A 是 At 轴,P 是位置。 x、y 和 z 后缀是每个向量的分量。这很容易想象:想象一组正交单位向量,前三个定义旋转,最后一个是矩阵在世界上的位置,也就是上面的矩阵。
一旦您了解了上面的内容,移动它应该很容易看到。然而,旋转它要复杂得多。看东西很容易:
A = |target pos - camera pos| (pos is bottom row here)
然后 R 和 U 是 A 和指向正确方向的全局轴的叉积。
矩阵可以绕任意轴旋转(您提到的局部轴和全局轴都属于这个范围),但数学非常复杂(对于这个答案来说太复杂了)。
此站点更详细:Wikipedia 这里列出了一些标准矩阵运算。您还可以查看 Wolfram 网站进行更深入的讨论,如果您看的话,肯定有很好的在线资源。
矩阵可以相乘,结果实际上是每个矩阵单独执行的操作的组合。因此,您可以将一个矩阵作为一般运动(方向部分具有单位、轴对齐的向量),而另一个矩阵可以是 (0,0,0) 处的旋转矩阵。这两者的乘积将是一个运动和旋转矩阵。这就是对象层次结构和对象放置在世界中的工作方式。此外,它也用于动画中。
您使用的 API 应该提供一个 API 来围绕任意轴旋转矩阵,但它有助于了解正在发生的事情。
一旦你了解了所有这些,你就可以看看四元数了。请记住,使用四元数没有什么是您无法使用矩阵做的。
(1) 据我所知