旋转矩阵之间的插值

Son*_*man 12 opengl interpolation rotation matrix

我有2个旋转矩阵(让我们称之为A和B),其中:

A = 1  0  0
    0  0 -1
    0  1  0
Run Code Online (Sandbox Code Playgroud)

B = -1  0  0
     0  0 -1
     0 -1  0
Run Code Online (Sandbox Code Playgroud)

这基本上只是一个旋转,相机旋转在后面看自己.显然,我不能直接在矩阵中插值,因为它看起来很奇怪.我已经尝试将矩阵转换为欧拉角,产生2组X,Y,Z角,并试图根据X,Y,Z角的每个分量之间的最小距离确定使用哪个角.这肯定会产生我想要的那种旋转,但是我想不出一个合适的方法来确定插入哪个角度,因为有时导致最小误差的角度组会导致围绕错误的轴/轴旋转.我也尝试了四元数,但这基本上给了我相同的结果.谁能指出我正确的方向?

Ali*_*Ali 25

使用四元数(SLERP).旋转矩阵和欧拉角都不适合插值.

请参阅此处的 45:05 (David Sachs,Google Tech Talk).


小智 9

我个人认为使用四元数这种类型的东西更有意义.也就是说,你可以在不使用四元数的情况下完成它.

要注意的是,"差异"矩阵,即将"方向" A变为"方向" 的矩阵B可以通过T = A.tranpose() * B(考虑到你在右边相乘)来计算.获得旋转矩阵后T,您可以转换为Axis-Angle表示(请参阅http://en.wikipedia.org/wiki/Axis-angle_representation).

最后,由于要知道的旋转轴这需要AB,可以线性插入从零角度先前从计算的角度T.

这相当于使用SLERP.