GodZza

导航

矩阵分解[提取Position/Rotation/Scale]

基于Unity Matrix4x4的矩阵分解,当然不能将投影矩阵分解成 Position等,具体可以参考 XNA 的矩阵分解

using VEC1 = System.Single;
using VEC2 = UnityEngine.Vector2;
using VEC3 = UnityEngine.Vector3;
using VEC4 = UnityEngine.Vector4;
using QUAT = UnityEngine.Quaternion;
using MTX = UnityEngine.Matrix4x4;

public static VEC3 GetPosition(MTX mtx)
{
    return mtx.GetColumn(3);
}

public static QUAT GetRotation(MTX mtx)
{
    return QUAT.LookRotation(mtx.GetColumn(2), mtx.GetColumn(1));
}

public static VEC3 GetScale(MTX mtx)
{
    return new VEC3(
        mtx.GetColumn(0).magnitude,
        mtx.GetColumn(1).magnitude,
        mtx.GetColumn(2).magnitude);
}

 

夹带私货 一些常用的数学代码

public static VEC1 Vector2Angle(VEC2 v)
{
    //使用 LookAt
    //v = v.normalized;
    //var rotate = Vector3.Cross(Vector3.forward, v);
    //var lootRot = Quaternion.LookRotation(Vector3.forward, rotate);
    //return lootRot.eulerAngles.z;
       
    var rad = Mathf.Atan2(v.y, v.x);
    var deg = rad * Mathf.Rad2Deg;
    return deg;
}

 

posted on 2019-06-09 01:37  GodZza  阅读(485)  评论(0编辑  收藏  举报