2011-06-06 95 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),您可以獲得大約(在舍入誤差內)相同的矩陣(我嘗試過,只是爲了確保)。