我的Unity 3D之旅 雜記之三種形式的旋轉

2021-07-16 08:25:35 字數 700 閱讀 4332

transform元件是unity中非常常用的乙個元件,用於控制物體的位移、旋轉和縮放,指令碼中也有對應的transform類實現對應的控制。而旋轉,是這三種變換中最為複雜的一種。我們所熟悉的旋轉一般是矩陣旋轉和尤拉旋轉。在unity中,還有一種用於描述旋轉的方式,叫四元數,即quaternion。那麼它們之間有什麼區別和聯絡呢?(又來這句- -)通過查閱資料,我得到了一些啟發,下面一一說來。

學過線性代數就會知道,把乙個三維向量乘上乙個三階旋轉矩陣就能得到旋轉後的向量。這種方法的好處是可以實現三維空間中的任意旋轉,但是缺點是浪費空間——確定乙個旋轉只需要知道旋轉軸的方向向量和旋轉角度共4個值,而三階旋轉矩陣需要9個值(還有用四階旋轉矩陣的,那就需要16個值,更多了……不過不是很明白是怎樣用四階旋轉矩陣表達三維空間的旋轉的,如果有大神看到,望不吝賜教),另外矩陣乘法也是不小的計算量。

使用四元數的主要優點是避免了萬向節死鎖現象,而且實現乙個旋轉只需要4個值。另外使用四元數進行平滑插值也非常容易。不過因為四元數是基於四維空間的,不直觀,較難理解,在實際運用上有一定難度。

實際上,在unity中,即使我們不知道關於四元數的各種性質和變換公式,也絲毫不影響我們使用四元數,unity提供了許多非常有用的轉換函式可以將各種旋轉轉化為四元數,可以滿足大多數需求了。不過有一點需要注意,由於四元數是基於四維空間的,比我們以往所熟悉的三維空間多了乙個維度,所以除非我們對四元數非常了解,否則不要對它們直接賦值

開始Unity3D的學習之旅

前言 這個系列的文章純屬對自己學習的整理,非高手之作。但確實的記載了我作為乙個沒接觸過3d遊戲程式設計的大學生的心路歷程。爭取每週整理一次吧。之所以會開始學unity3d,最基本的原因是由於在快放暑假的時候,我找了一家做iphone遊戲的小公司實習。找的過程就不提咯,反正來了之後算是苦逼咯。在來之前...

開始Unity3D的學習之旅

前言 這個系列的文章純屬對自己學習的整理,非高手之作。但確實的記載了我作為乙個沒接觸過3d遊戲程式設計的大學生的心路歷程。爭取每週整理一次吧。之所以會開始學unity3d,最基本的原因是由於在快放暑假的時候,我找了一家做iphone遊戲的小公司實習。找的過程就不提咯,反正來了之後算是苦逼咯。在來之前...

Unity3D內建Shader翻譯三

上次講的是transparent shader family,他們是繪製半透明的物件使用的,但他們並不能滿足我們全部的要求。transparent cutout shader family是對半透明物件shader的一類補充,與transparent shader family有所區別的是 cuto...