0

我尝试了许多公式和转换,但没有给我预期的结果。

场景非常简单:

3DS Max等3D软件如何将局部旋转增量“转化”为全局绝对旋转?

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

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

在这些转换之后,按照这个顺序,我查看了 World Absolute 旋转,我看到的是X:40.524 Y:-28.024 Z:-21.881

他们是如何达到这个结果的?什么样的公式?使用矩阵、欧拉角或四元数,无论如何,我怎样才能得到相同的结果?

谢谢你。

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

4

2 回答 2

1

您想根据应用旋转的顺序将旋转矩阵相乘,如果首先应用局部旋转(我怀疑是这样),那么:

WorldMat * LocalMat [* column vector]

(如果您预先将列向量相乘以应用您的转换,如果您反其道而行,只需对整个表达式进行转置)

同样,如果您使用四元数,则应该将四元数相乘(而不是相加)。

于 2011-06-06T15:24:59.487 回答
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),你会得到大约(在舍入误差内)相同的矩阵(我确实尝试过,只是为了确保)。

于 2011-06-17T04:16:42.390 回答