Unity手游之路四3d旋转-四元数,欧拉角和变幻矩阵
http://blog.csdn.net/janeky/article/details/17272625
今天我們來談談關于Unity中的旋轉。主要有三種方式。變換矩陣,四元數和歐拉角。
定義
- 變換矩陣
可以執行任意的3d變換(平移,旋轉,縮放,切邊)并且透視變換使用齊次坐標。一般比較少用到。Unity中提供了一個Matrix4x4矩陣類
- 四元數
“四元數是最簡單的超復數。 復數是由實數加上元素 i 組成,其中i^2 = -1。 相似地,四元數都是由實數加上三個元素 i、j、k 組成,而且它們有如下的關系: i^2 = j^2 = k^2 = ijk = -1 , 每個四元數都是 1、i、j 和 k 的線性組合,即是四元數一般可表示為a + bi + cj + dk,其中a、b、c 、d是實數”。這些概念很難懂吧。只要先記得Unity中的Quaternion有4個組件(x,y,z,w)
- 歐拉角
“用來確定定點轉動剛體位置的3個一組獨立角參量,由章動角θ、旋進角(即進動角)ψ和自轉角j組成”
在Unity中,Quaternion.eulerAngles 返回旋轉的角度,繞z軸旋轉euler.z角度,繞x軸旋轉euler.x度,繞y軸旋轉euler.y度
轉換
- 1.四元數到變換矩陣
- 2.變換矩陣到四元數
?
常用的函數
function ToAngleAxis (out angle : float, out axis : Vector3) : void
繞axis軸旋轉angle,創建一個旋轉
static function Angle (a : Quaternion, b : Quaternion) : float
返回a和b兩者之間的角度。
var eulerAngles : Vector3
返回表示旋轉的歐拉角度。表示旋轉的角度,繞z軸旋轉euler.z度,繞x軸旋轉euler.x度,繞y軸旋轉euler.y度(這樣的順序)。
function SetFromToRotation (fromDirection : Vector3, toDirection : Vector3) : void
把物體的fromDirection旋轉到toDirection
function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
建立一個旋轉使z軸朝向view y軸朝向up
static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
從from 轉換到to,移動距離為t
static function Lerp (a : Quaternion, b : Quaternion, t : float) : Quaternion
跟Slerp相似,且比Slerp快,.但是如果旋轉角度相距很遠則會看起來很差
比較
- 變換矩陣
可以做各種復雜的變換,但是學習曲線比較大,使用的內存也比較多,因為存儲的數據量比較大。
- 歐拉角
簡單理解,尤其是對美術和策劃的同事。運算速度和消耗內存比較少。可能存在萬向鎖的問題(兩個軸的旋轉重合)
- 四元數
避免了萬向鎖的問題。理解起來不是那么直接。
有任何問題歡迎一起探討ken@iamcoding.com
轉載于:https://www.cnblogs.com/123ing/p/4114864.html
總結
以上是生活随笔為你收集整理的Unity手游之路四3d旋转-四元数,欧拉角和变幻矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows硬盘映射网络磁盘目录,设置
- 下一篇: TWRP-recovery中文界面安装方