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