Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.03 KB | None | 0 0
  1.     @GarbageFree
  2.     public static Quaternion matrixToQuaternion(Matrix4f m, Quaternion dest) {
  3.         if (dest == null) {
  4.             dest = new Quaternion();
  5.         }
  6.         float tr = m.m00 + m.m11 + m.m22;
  7.  
  8.         if (tr > 0) {
  9.             float S = (float) Math.sqrt(tr + 1.0) * 2; // S=4*qw
  10.             dest.w = 0.25f * S;
  11.             dest.x = (m.m12 - m.m21) / S;
  12.             dest.y = (m.m20 - m.m02) / S;
  13.             dest.z = (m.m01 - m.m10) / S;
  14.         } else if ((m.m00 > m.m11) & (m.m00 > m.m22)) {
  15.             float S = (float) Math.sqrt(1.0 + m.m00 - m.m11 - m.m22) * 2; // S=4*qx
  16.             dest.w = (m.m12 - m.m21) / S;
  17.             dest.x = 0.25f * S;
  18.             dest.y = (m.m10 + m.m01) / S;
  19.             dest.z = (m.m20 + m.m02) / S;
  20.         } else if (m.m11 > m.m22) {
  21.             float S = (float) Math.sqrt(1.0 + m.m11 - m.m00 - m.m22) * 2; // S=4*qy
  22.             dest.w = (m.m20 - m.m02) / S;
  23.             dest.x = (m.m10 + m.m01) / S;
  24.             dest.y = 0.25f * S;
  25.             dest.z = (m.m21 + m.m12) / S;
  26.         } else {
  27.             float S = (float) Math.sqrt(1.0 + m.m22 - m.m00 - m.m11) * 2; // S=4*qz
  28.             dest.w = (m.m01 - m.m10) / S;
  29.             dest.x = (m.m20 + m.m02) / S;
  30.             dest.y = (m.m21 + m.m12) / S;
  31.             dest.z = 0.25f * S;
  32.         }
  33.  
  34.         return dest;
  35.     }
  36.  
  37.     @GarbageFree
  38.     public static Vector3f matrixToScale(Matrix4f m, Vector3f dest) {
  39.         if (dest == null) {
  40.             dest = new Vector3f();
  41.         }
  42.         dest.x = (float)Math.sqrt(m.m00*m.m00 + m.m01*m.m01 + m.m02*m.m02);
  43.         dest.y = (float)Math.sqrt(m.m10*m.m10 + m.m11*m.m11 + m.m12*m.m12);
  44.         dest.z = (float)Math.sqrt(m.m20*m.m20 + m.m21*m.m21 + m.m22*m.m22);
  45.  
  46.         return dest;
  47.     }
  48.  
  49.     @GarbageFree
  50.     public static Vector3f matrixToTranslation(Matrix4f m, Vector3f dest) {
  51.         if (dest == null) {
  52.             dest = new Vector3f();
  53.         }
  54.  
  55.         dest.x = m.m30;
  56.         dest.y = m.m31;
  57.         dest.z = m.m32;
  58.  
  59.         return dest;
  60.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement