1. 程式人生 > >Unity3d開發之對Quaternion的使用

Unity3d開發之對Quaternion的使用

上週找到了新公司。這週二來上班。可怕的是我剛去的第二天下午四點領導通知我做一個VRdemo,要求第二天交。我勒個擦。我現在對裝置還沒熟悉呢。連sdk都沒下載而且距離上一次開發vr是在快兩年之前了。屬實讓我措手不及。沒錯,按劇本走,加班到凌晨。累屁了。下面記錄下我在開發專案中遇到對Quaternion的使用。

Quaternion是四元數的類。而四元數是可以操作一個物體的旋轉。我們百度可以看到四原數可如下表示:

沒錯,標準的四元數w在第一位,接下來是xyz分量。上式代表物體繞著(vx,vy,vz)軸旋轉\theta度。我們先不管(vx,vy,vz)代表的是世界座標系下的軸還是本地座標系下的軸。這個我們在後面會區分。而unity的四元數構造器如下:

所以我們可能需要調整下對應值的順序。

如果我們想繞著y軸旋轉90度,對應程式碼如下:

 //宣告一個四元數  按照公式往裡填數
        Quaternion q = new Quaternion(0,Mathf.Sin(Mathf.Deg2Rad*90/2),0, Mathf.Cos(Mathf.Deg2Rad * 90 / 2));
        transform.rotation = transform.rotation*q;	

我們把這個指令碼掛到物體上會發現,物體會繞著自身的Y軸旋轉90度。我們記得四元數是左乘,於是我們換一下位置嘗試下:

//宣告一個四元數  按照公式往裡填數
        Quaternion q = new Quaternion(0,Mathf.Sin(Mathf.Deg2Rad*90/2),0, Mathf.Cos(Mathf.Deg2Rad * 90 / 2));
        transform.rotation = q*transform.rotation;	

我們再次測試發現物體繞著世界座標的Y周旋轉。所以綜上我們可以得出兩個結論:

  • 四元數右乘是代表繞著被旋轉物體本地對應的座標軸旋轉。而左乘代表繞著世界座標對應的座標軸旋轉。
  • 四元數旋轉是按著順時針方向旋轉的。(角度是正值的情況下)

後面會更新一篇關於在開發vr過程中對四元數使用的文章。至於以上原理是啥,我也不太清楚。四元數是半路學的而且也不專業。希望以後明白了原理再來更新。以上是本部落格的內容,如果有不正確的地方歡迎指出。

附贈一張凌晨回家的照片。感覺像是國家元首視察,封路。一路上都沒有車真好。