2010-03-21 43 views
4

GLGravity iPhone示例顯示如何使用加速度計和OpenGL患有Gimbal Lock問題。我想知道是否有任何代碼可用四元數旋轉,而不是歐拉角?任何幫助將不勝感激,我很長一段時間沒有成功努力...iPhone GLGravity示例使用四元數

+0

上次我檢查,有超過開發商是否甚至不需要擔心很多conetention的四元。我看到的最常見的選擇是使用相對參考框架來避免萬向節鎖(權衡似乎是四元數需要少一點代碼,但難以理解 - 性能差異可能可以忽略不計)。我會發佈一個鏈接,但對我來說太長了,我找不到任何鏈接。 :( – FrustratedWithFormsDesigner 2010-03-21 18:15:25

回答

3

它有助於在試圖實施和使用它自己之前有一個很好的把握理論的東西。以下是關於使用四元數旋轉的兩篇介紹性文章。兩者都主要與平滑的旋轉插值,避免萬向節鎖定在累積旋轉:

Gamedev.net - Quaternion Powers

Gamasutra - Rotating Objects Using Quaternions

現在只要實際的代碼去,我會建議得到和使用,一「產業實力「矢量數學庫,而不是滾動自己的。我的建議是抓住Bullet物理中間件項目的LinearMath部分。子彈物理學和包含的線性數學庫是由索尼的一些頂級工程師開發的,並且多年來一直在積極開發。它是免費的,不受任何許可證(Zlib許可證)的限制,並且被世界各地的專業遊戲開發者使用。該lib是跨平臺/架構,並編譯從iPhone到PS3的任何內容。

該庫提供了一個Quaternion類,允許您從歐拉角或圍繞任意軸旋轉創建四元數,例如,使用setEulerZYX。一旦你有了你的四元數,就可以建立適用於它們的所有常用操作的函數;加號,減號,mul,標準化,斯萊普等等。

對於實際將最終四元數應用於OpenGL渲染,Transform類允許您從四元數中得到一個矩陣construct。 transform類又包含一個函數getOpenGLMatrix,它直接給你一個兼容的矩陣傳遞給OpenGL。

該庫還包括一系列其他非常有用的矩陣和向量類和函數。

抓住從google code最新的子彈DIST,或從Subversion使用直接抓取只是代碼的LinearMath部分:svn checkout http://bullet.googlecode.com/svn/trunk/src/LinearMath

+0

哇,感謝您提供的有用信息!我將花一些時間深入理論,並嘗試從庫中構建一些有用的東西,這些鏈接非常有用,經過幾天的搜索,我沒有實際觸及它們。 – 2010-03-27 20:59:32