码迷,mamicode.com
首页 > 其他好文 > 详细

四元素与矩阵之间相互转换

时间:2019-07-03 19:55:33      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:stat   sig   vector   相互转换   ide   static   div   set   osi   

1.矩阵转换为四元素

public static Quaternion QuaternionFromMatrix(Matrix4x4 m)
        {
            Quaternion q = new Quaternion();
            q.w = Mathf.Sqrt(Mathf.Max(0, 1 + m[0, 0] + m[1, 1] + m[2, 2])) / 2;
            q.x = Mathf.Sqrt(Mathf.Max(0, 1 + m[0, 0] - m[1, 1] - m[2, 2])) / 2;
            q.y = Mathf.Sqrt(Mathf.Max(0, 1 - m[0, 0] + m[1, 1] - m[2, 2])) / 2;
            q.z = Mathf.Sqrt(Mathf.Max(0, 1 - m[0, 0] - m[1, 1] + m[2, 2])) / 2;
            q.x *= Mathf.Sign(q.x * (m[2, 1] - m[1, 2]));
            q.y *= Mathf.Sign(q.y * (m[0, 2] - m[2, 0]));
            q.z *= Mathf.Sign(q.z * (m[1, 0] - m[0, 1]));
            return q;
        }

2.矩阵的构成要素

public static Matrix4x4 CreateMatrix(Vector3 right, Vector3 up, Vector3 forward, Vector3 position)
        {
            Matrix4x4 m = Matrix4x4.identity;
            m.SetColumn(0, right);
            m.SetColumn(1, up);
            m.SetColumn(2, forward);
            m.SetColumn(3, position);
            m[3, 3] = 1;
            return m;
        }

3.四元素转化为矩阵

public static Matrix4x4 MatrixFromQuaternion(Quaternion q)
        {
            return CreateMatrix(q * Vector3.right, q * Vector3.up, q * Vector3.forward, Vector3.zero);
        }

 

四元素与矩阵之间相互转换

标签:stat   sig   vector   相互转换   ide   static   div   set   osi   

原文地址:https://www.cnblogs.com/mttnor/p/11128316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!