2011-08-11 43 views
1

我正在與Opengl es創建一個火柴人,這可能看起來像一個愚蠢的問題,但是當使用四元數來表示旋轉時,如果想要旋轉圍繞另一個點而不是原點,應該如何處理我使用單位四元數或不使用。 我的猜測是我可以旋轉,然後翻譯太改變旋轉的中心,我不打算使用單位四元數。這是正確的道路嗎?Opengl ES的四元數

+1

爲什麼你不使用單位四元數? –

+0

以及單位四元數會給我一個單位3維球體的旋轉。我猜想這不是我想要的,因爲我想旋轉的點在任意球上 – Steve

+1

任意四元數不能提供足夠的自由度來圍繞任意點旋轉(它只提供一個額外的度數,而點需要三個)。您也無法避免應用偏移量。 –

回答

1

就像在評論中說的,一個非單位四元數不會在任意點繞魔法旋轉。所以不需要使用非單元四元數。你需要做的是,將你的旋轉中心平移到原點,像往常一樣用四元數旋轉原點,然後轉回到旋轉中心。

如果你想在一個單一的數學清理結構中真正表示整個轉換,你可以使用雙四元數,但我相信這會過度殺傷。

+0

我做的其實很簡單。我把我的歐拉角變換成四元數,然後通過將四元數與該點相乘來將旋轉應用到一個點上。 – Steve

+0

是的,?在你的問題中,你要求圍繞任意點旋轉,所以現在你必須在兩個翻譯之間包裝這個旋轉,就像上面說的那樣。 –

+0

好吧,這是奇怪的事情。假設我希望我的旋轉中心是(0,-2,0),並且我想旋轉的點是(1,0,0)。我所要做的就是將晚點轉換爲(1,-2,0),旋轉中心將自動從(0,0,0)到(0,-2,0)。當我將點(1,-2,0)繞y軸逆時針旋轉90°時,假設它看起來好像繞着(0,-2,0)而不是(0,0,0)旋轉,任何翻譯。 – Steve