BitHelper.MatrixDeCompose C# (CSharp) Method

MatrixDeCompose() public static method

public static MatrixDeCompose ( Matrix4x4, m, Vector3 &pos, Vector3 &scale, Quaternion, &quat ) : void
m Matrix4x4,
pos Vector3
scale Vector3
quat Quaternion,
return void
    public static void MatrixDeCompose(Matrix4x4 m, out Vector3 pos, out Vector3 scale, out Quaternion quat)
    {
        //quat
        Vector3 vf = m.MultiplyVector(Vector3.forward);
        Vector3 vu = m.MultiplyVector(Vector3.up);
        quat = Quaternion.LookRotation(vf, vu);
        //pos
        pos = new Vector3(m.m03, m.m13, m.m23);
        //去掉旋转和偏移
        m.m03 = 0; m.m13 = 0; m.m23 = 0;
        Matrix4x4 im = Matrix4x4.TRS(Vector3.zero, quat, Vector3.one);
        m *= im.inverse;
        //scale
        scale = new Vector3(m.m00, m.m11, m.m22);

    }
    public static byte[] getBytes(Bounds bound)

Usage Example

コード例 #1
0
    // Use this for initialization
    void Start()
    {
        var mats =
            this.GetComponent <SkinnedMeshRenderer>().sharedMesh.bindposes;

        foreach (var m in mats)
        {
            var gameo = new GameObject();
            var sub   = GameObject.CreatePrimitive(PrimitiveType.Cube);
            gameo.transform.parent = this.transform;

            sub.transform.parent        = gameo.transform;
            sub.transform.localPosition = Vector3.zero;
            sub.transform.localRotation = Quaternion.identity;
            sub.transform.localScale    = new Vector3(0.05f, 0.05f, 0.05f);
            Vector3    pos;
            Vector3    scale;
            Quaternion quat;
            BitHelper.MatrixDeCompose(m.inverse, out pos, out scale, out quat);
            gameo.transform.localScale    = scale;
            gameo.transform.localRotation = quat;
            gameo.transform.localPosition = pos;
        }
    }
All Usage Examples Of BitHelper::MatrixDeCompose