Beispiel #1
0
    static public Quaternion GetQuaternion(TRSParser parser)
    {
        Quaternion u_q = Quaternion.identity;


        foreach (TRSParser.Sentences sts in parser)
        {
            if (0 == sts.Count)
            {
                continue;
            }

            switch (sts.kind)
            {
            case TRSParser.Sentences.eKind.Quaternion:
            {
                ///1.
                //u_q.eulerAngles = sts[0].xyz;


                ///2.
                IvQuat  iv_q  = new IvQuat();
                Vector3 v3Rad = sts [0].xyz * Mathf.Deg2Rad;
                iv_q.Set(v3Rad.z, v3Rad.y, v3Rad.x);

                u_q.w = iv_q.w;
                u_q.x = iv_q.x;
                u_q.y = iv_q.y;
                u_q.z = iv_q.z;
            }
            break;
            }
        }

        return(u_q);
    }
Beispiel #2
0
    static public Matrix4x4 ParsingMatrix(TRSParser parser, string order)
    {
        parser.Parsing(order);

        Matrix4x4 trs = Matrix4x4.identity;

        foreach (TRSParser.Sentences sts in parser)
        {
            if (0 == sts.Count)
            {
                continue;
            }

            switch (sts.kind)
            {
            case TRSParser.Sentences.eKind.Translate:
            {
                trs = trs * TRSHelper.GetTranslate(sts [0].xyz);
            }
            break;

            case TRSParser.Sentences.eKind.Rotate:
            {
                if (TRSParser.Command.eKind.X == sts [0].kind)
                {
                    trs = trs * TRSHelper.GetRotateX(sts [0].degree);
                }
                if (TRSParser.Command.eKind.Y == sts [0].kind)
                {
                    trs = trs * TRSHelper.GetRotateY(sts [0].degree);
                }
                if (TRSParser.Command.eKind.Z == sts [0].kind)
                {
                    trs = trs * TRSHelper.GetRotateZ(sts [0].degree);
                }
            }
            break;

            case TRSParser.Sentences.eKind.Quaternion:
            {
                IvQuat  q     = new IvQuat();
                Vector3 v3Rad = sts [0].xyz * Mathf.Deg2Rad;
                q.Set(v3Rad.z, v3Rad.y, v3Rad.x);
                Matrix4x4 m = q.GetMatrix();
                trs = trs * m;

                //chamto test - print fixedAngles of IvQuat
                Vector3 angles = IvQuat.GetFixedAnglesFrom(ref m);
                angles *= Mathf.Rad2Deg;
                DebugWide.LogRed("1: IvQuat angles : " + angles + "\n");                        //chamto test
            }
            break;

            case TRSParser.Sentences.eKind.Scale:
                trs = trs * TRSHelper.GetScale(sts [0].xyz);
                break;
            }
        }

        return(trs);
    }