예제 #1
0
        public static MiMatriz4x4 Rotate(Quats q)
        {
            //Manipulacion algebraica de p' = q*p*q^-1
            MiMatriz4x4 m = zero;

            m.r0c0 = 1.0f - (2.0f * q.y * q.y) - (2.0f * q.z * q.z);
            m.r0c1 = 2.0f * q.x * q.y - 2.0f * q.z * q.w;
            m.r0c2 = 2.0f * q.x * q.z + 2.0f * q.y * q.w;
            m.r0c3 = 0.0f;

            m.r1c0 = 2.0f * q.x * q.y + 2.0f * q.z * q.w;
            m.r1c1 = 1 - 2.0f * q.x * q.z - 2.0f * q.z * q.z;
            m.r1c2 = 2.0f * q.y * q.z - 2.0f * q.x * q.w;
            m.r1c3 = 0.0f;

            m.r2c0 = 2.0f * q.x * q.z - 2.0f * q.y * q.w;
            m.r2c1 = 2.0f * q.y * q.z + 2.0f * q.x * q.w;
            m.r2c2 = 1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y;
            m.r2c3 = 0.0f;

            m.r3c0 = 0.0f;
            m.r3c1 = 0.0f;
            m.r3c2 = 0.0f;
            m.r3c3 = 1.0f;

            return(m);
        }
예제 #2
0
        public static MiMatriz4x4 TRS(Vec3 pos, Quats q, Vec3 s)
        {
            MiMatriz4x4 T   = Translate(pos);
            MiMatriz4x4 R   = Rotate(q);
            MiMatriz4x4 S   = Scale(s);
            MiMatriz4x4 TRS = T * R * S;

            return(TRS);
        }
예제 #3
0
 public void SetTRS(Vec3 pos, Quats q, Vec3 s)
 {
     this = TRS(pos, q, s);
 }