2011-06-06 57 views
0

我已经尝试了很多公式和转换,但没有给出我期望的结果。将本地旋转添加到全局旋转

的方案是非常简单的:

如何在3ds Max和其他3D软件使当地旋转增量的“转型”全球绝对旋转?

一个例子可以帮助你理解: 3DS Max - Maya - Modo(这三个都给了我相同的结果,所以我倾向于相信这个结果是正确的。)假设绝对旋转顺序为XYZ。

1. World Rotation Y = 35.0; 
2. Local Rotation X = 35.0; 

这些转换后,按照这个顺序,我看世界的绝对的旋转和我所看到的是X:40.524 Y:-28.024 Z:-21.881

他们是如何达到这种效果?什么样的配方?使用矩阵,欧拉角或四元数,无论如何,我怎么能得到相同的结果?

谢谢。 PS:一个简单的解决方案可以是使用四元数或矩阵,将局部旋转添加到全局中,然后检索绝对结果。但是这样做效果不好,因为这样我们就无法控制旋转顺序,结果总是使用公式的顺序来检索值。

+0

您的文章scriptum没有多大意义。从欧拉角度,您可以使用任意旋转顺序构建(AND解构)旋转矩阵。如果你始终坚持一个单一的旋转顺序,这对用户来说会更清晰。 – 2011-06-07 12:05:49

回答

1

你想为了旋转矩阵依赖顺序在其中的旋转应用,如果本地旋转要先应用(我怀疑它是),则:

WorldMat * LocalMat [* column vector] 

(假设你是预先乘以列向量来应用你的变换,只需要转置整个表达式,如果你这样做的话)

同样,如果你正在使用四元数,你应该是乘以你的四元数(不添加它们)。

0

的旋转矩阵是这样的(假设列向量表示):

[ 1  0  0 ] 
[ 0 cos(a) sin(a)] = Rx(a) 
[ 0 -sin(a) cos(a)] 

[ cos(a) 0 -sin(a)] 
[ 0  1  0 ] = Ry(a) 
[ sin(a) 0  cos(a)] 

[ cos(a) sin(a) 0 ] 
[-sin(a) cos(a) 0 ] = Rz(a) 
[ 0  0  1 ] 

乘法的“本地”是指基质的推移的权利。乘以“全局”意味着矩阵在左边。所以你的轮转是Ry(35°)* Rx(35°)。或约:

[ .819 .329 -.469 ] 
[ 0 .019 .574 ] 
[ .574 -.470 .671 ] 

欧拉旋转次序XYZ指的Rx(AX)* RY(AY)* RZ(AZ)。所以,如果插入数字Rx(40.524°)* Ry(-28.024°)* Rz(-21.881),您可以获得大约(在舍入误差内)相同的矩阵(我尝试过,只是为了确保)。