旋转矩阵之间的插值

时间:2011-04-07 11:27:19

标签: opengl matrix rotation interpolation

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

A = 1  0  0
    0  0 -1
    0  1  0

B = -1  0  0
     0  0 -1
     0 -1  0

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

2 个答案:

答案 0 :(得分:25)

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

见45:05 here (David Sachs, Google Tech Talk)

答案 1 :(得分:9)

我个人的观点是,使用四元数来做这类事情更有意义。也就是说,你可以在不使用四元数的情况下完成它。

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

最后,由于您知道一个将A转换为B的旋转轴,因此您可以线性插补从零到先前从T计算的角度的角度。

这相当于使用SLERP。