日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity手游之路四3d旋转-四元数,欧拉角和变幻矩阵

發布時間:2023/12/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.四元數到變換矩陣
[csharp]?view plaincopy
  • Quaternion?q?=?Quaternion.LookRotation(new?Vector3(0,0.5,1));????
  • Matrix4x4?rot?=?new?Matrix4x4();????
  • rot.SetTRS(new?Vector3(0,0,0),q,new?Vector3(1,1,1));????


    • 2.變換矩陣到四元數
    [csharp]?view plaincopy
  • Matrix4x4?rot?=?new?Matrix4x4();????
  • rot.SetTRS(new?Vector3(0,0,0),q,new?Vector3(1,1,1));????
  • ????????????
  • Vector4?vy?=?rot.GetColumn(1);????
  • Vector4?vz?=?rot.GetColumn(2);????
  • ????????????
  • Quaternion?newQ?=?Quaternion.LookRotation(new?Vector3(vz.x,vz.y,vz.z),new?Vector3(vy.x,vy.y,vy.z));????
  • ?


    常用的函數
    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旋转-四元数,欧拉角和变幻矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。