Exemplo n.º 1
0
        public static TMOFrame[] Slerp(TMOFrame frame0, TMOFrame frame1, TMOFrame frame2, TMOFrame frame3, int length)
        {
            TMOFrame[] frames = new TMOFrame[length];

            for (int frame_index = 0; frame_index < length; frame_index++)
            {
                frames[frame_index]          = new TMOFrame();
                frames[frame_index].matrices = new TMOMat[frame1.matrices.Length];
            }

            for (int i = 0; i < frame1.matrices.Length; i++)
            {
                TMOMat[] interpolated_matrices = TMOMat.Slerp(
                    frame0.matrices[i],
                    frame1.matrices[i],
                    frame2.matrices[i],
                    frame3.matrices[i],
                    length);

                for (int frame_index = 0; frame_index < length; frame_index++)
                {
                    frames[frame_index].matrices[i] = interpolated_matrices[frame_index];
                }
            }
            return(frames);
        }
Exemplo n.º 2
0
        public static void Write(BinaryWriter bw, TMOMat item)
        {
            Matrix m = item.m;

            bw.Write(m.M11); bw.Write(m.M12); bw.Write(m.M13); bw.Write(m.M14);
            bw.Write(m.M21); bw.Write(m.M22); bw.Write(m.M23); bw.Write(m.M24);
            bw.Write(m.M31); bw.Write(m.M32); bw.Write(m.M33); bw.Write(m.M34);
            bw.Write(m.M41); bw.Write(m.M42); bw.Write(m.M43); bw.Write(m.M44);
        }
Exemplo n.º 3
0
        public static TMOFrame AddSub(TMOFrame frame0, TMOFrame frame1, TMOFrame frame2, int[] index_pair)
        {
            TMOFrame ret = new TMOFrame();

            ret.matrices = new TMOMat[frame0.matrices.Length];
            for (int i = 0; i < frame0.matrices.Length; i++)
            {
                ret.matrices[i] = TMOMat.AddSub(frame0.matrices[i], frame1.matrices[index_pair[i]], frame2.matrices[index_pair[i]]);
            }
            return(ret);
        }
Exemplo n.º 4
0
        public static TMOMat AddSub(TMOMat mat0, TMOMat mat1, TMOMat mat2)
        {
            Matrix  m0 = mat0.m;
            Matrix  m1 = mat1.m;
            Matrix  m2 = mat2.m;
            Vector3 t0 = DecomposeMatrix(ref m0);
            Vector3 t1 = DecomposeMatrix(ref m1);
            Vector3 t2 = DecomposeMatrix(ref m2);
            Matrix  m  = m1 * Matrix.Invert(m2) * m0;
            Vector3 t  = t1 - t2 + t0;

            return(new TMOMat(m * Matrix.Translation(t)));
        }
Exemplo n.º 5
0
        public static TMOMat[] Slerp(TMOMat mat0, TMOMat mat1, TMOMat mat2, TMOMat mat3, int length)
        {
            TMOMat[] ret = new TMOMat[length];

            Quaternion q1 = Quaternion.RotationMatrix(mat1.m);
            Quaternion q2 = Quaternion.RotationMatrix(mat2.m);

            Vector3 v0 = new Vector3(mat0.m.M41, mat0.m.M42, mat0.m.M43);
            Vector3 v1 = new Vector3(mat1.m.M41, mat1.m.M42, mat1.m.M43);
            Vector3 v2 = new Vector3(mat2.m.M41, mat2.m.M42, mat2.m.M43);
            Vector3 v3 = new Vector3(mat3.m.M41, mat3.m.M42, mat3.m.M43);

            float dt = 1.0f / length;

            for (int i = 0; i < length; i++)
            {
                ret[i] = new TMOMat(Matrix.RotationQuaternion(Quaternion.Slerp(q1, q2, dt * i)) * Matrix.Translation(Vector3.CatmullRom(v0, v1, v2, v3, dt * i)));
            }
            return(ret);
        }