cocos2D-X源碼分析之從cocos2D-X學習OpenGL(19)----旋轉表示法

       從數學上表示旋轉,可以有三種表示方法:矩陣法,歐拉角法和四元數法,我們之前已經介紹了矩陣法,它有個問題,就是容易造成萬向節死鎖,所謂萬向節死鎖,就是當繞一個軸旋轉到90度的時候,再繞另外兩個軸旋轉的結果都是一樣的,也就是說少了一個自由度,另外矩陣法其中有無用的數據,造成內存的浪費。

       歐拉角法是由歐拉在十八世紀提出,它由三個角表示:俯仰角,yaw偏航角,roll滾轉角。


struct Euler{
    btScalar yaw;
    btScalar pitch;
    btScalar roll;
};
       歐拉角的表示方法很簡潔,只用三個角度就可以表示旋轉,但是它也有萬向節死鎖的情況,而且進行線性插值的時候,由於角度有360度週期的問題,所以變化往往會有不好的效果,所以就有另外一種四元數的表示方法。

       四元數是一種超複數,它的表示就是有三個虛部的複數,表示法如下:


       由於i,k,j的表示很像笛卡爾座標系的三個軸,所以可以合在一起表示一個向量,即旋轉軸,於是可以用四元數表示旋轉如下:


       關於四元數更多數學上的介紹可以參考:http://www.cnblogs.com/mengdd/archive/2013/08/05/3238223.html

       cocos2d-x中使用Quaternion類表示四元數,定義如下:

class CC_DLL Quaternion
{
public:

    /**
     * The x-value of the quaternion's vector component.
     */
    float x;
    /**
     * The y-value of the quaternion's vector component.
     */
    float y;
    /**
     * The z-value of the quaternion's vector component.
     */
    float z;
    /**
     * The scalar component of the quaternion.
     */
    float w;
    .........
}
      下一篇介紹模型,網格和材質


       能力不足,水平有限,如有錯誤,歡迎指出。

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章