我尝试了很多公式和转换,但没有任何东西能给我我期望的结果。
情景非常简单:
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 :(得分:1)
你希望乘以旋转矩阵的顺序取决于旋转的应用顺序,如果首先应用局部旋转(我怀疑它是),那么:
WorldMat * LocalMat [* column vector]
(如果你预先乘以列向量来应用你的变换,只要你反过来整个表达式的转置)
同样,如果您正在使用四元数,则应该乘以四元数(不添加它们)。
答案 1 :(得分: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 ]
乘以'local'意味着矩阵在右边。乘以'全局'意味着矩阵在左边。所以你的旋转 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),你会得到大约(在舍入误差内)相同的矩阵(我做了尝试一下,只是为了确保)。