2011-12-01 102 views
0

好了,希望我能在一個全面的方式解釋這個......原諒我,如果我徹底迷惑你...3D旋轉困境

我使用,使用應用旋轉矩陣對象的舊惱人的引擎只有本地空間。

我有一個文本工具,允許用戶(非程序員)來創建對象並將其旋轉(更改不會實時應用)。

如果只有一個軸旋轉,旋轉會很好,但當它們指定圍繞2個軸旋轉時(例如關於UP和RIGHT的旋轉),當然會變成翹曲,因爲關於UP的旋轉是使用本地UP,而不是全球(即世界)UP。

例如,假設我們有一個攝像頭(0,0,0)在尋找一個平面(0,-5,0)的寬面。該工具的用戶想要旋轉該平面的X(右)45度,以及全局上升45度。那麼,我沒有辦法讓他們簡單地指定2個旋轉值並獲得他們想要的全局UP旋轉值......他們需要通過試錯法來指定圍繞FORWARD(在這種情況下爲Y)的旋轉爲了保持對象「直立」。

我想知道的是:如何將繞2軸的旋轉轉換爲圍繞3軸的旋轉,假設關於UP的旋轉是全局UP,並且仍然獲得用戶想象的旋轉。

+0

我假設像(東,北,上)這樣(0,0,-5),低於五個單位起源,而你的相機正在低頭看着它。在這一點上,我不明白你的旋轉,但告訴我,如果這是你想要的。您首先想要將平面的北端傾斜45度,然後圍繞舊軸向旋轉平面(而不是當前與飛機垂直的平面)? – John

+0

對不起,我的飛機位置錯了,我糾正了。飛機將直接位於相機的前方,相機不旋轉。飛機的正常情況正對着相機。 在這個例子中,用戶希望從相機傾斜平面的頂部了,而其旋轉對全球UP(0,0,1在這種情況下)。 – RayJ

+2

以相反的順序旋轉它們。連續兩次旋轉,一個將始終在本地,另一個將始終在全球一側。所以,如果你當前使用的是錯誤的一面,請使用另一個。 – comingstorm

回答

0

局部座標系每個對象是固定的,所以只要你從全局座標軸旋轉對象的局部軸走,對全球軸(說全球最高)的旋轉變成任意旋轉關於本地軸。

所以,如果你想允許用戶圍繞全球起來,你需要弄清楚關於對象的局部座標軸旋轉/翻譯的正確組合。

谷歌搜索rotation about arbitrary axis想出了這個鏈接:

http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/

+0

所以要清楚 - 你提出的建議將允許用戶指定2次旋轉(比如X和Z旋轉),然後取這2個值並構建一個旋轉矩陣,該旋轉矩陣將具有正確的旋轉值將是關於所有3個局部座標軸的旋轉? – RayJ

+0

或多或少。我在想你必須解決的問題是任意軸(任何軸,但特別是全局上),當你知道該任意軸相對於固定座標系的組件時,如何旋轉該軸的對象(你的本地座標系)。 – John

+0

是的,有道理......我會朝這個方向前進。謝謝! – RayJ