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); }
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); }
public void SetTRS(Vec3 pos, Quats q, Vec3 s) { this = TRS(pos, q, s); }