Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @GarbageFree
- public static Quaternion matrixToQuaternion(Matrix4f m, Quaternion dest) {
- if (dest == null) {
- dest = new Quaternion();
- }
- float tr = m.m00 + m.m11 + m.m22;
- if (tr > 0) {
- float S = (float) Math.sqrt(tr + 1.0) * 2; // S=4*qw
- dest.w = 0.25f * S;
- dest.x = (m.m12 - m.m21) / S;
- dest.y = (m.m20 - m.m02) / S;
- dest.z = (m.m01 - m.m10) / S;
- } else if ((m.m00 > m.m11) & (m.m00 > m.m22)) {
- float S = (float) Math.sqrt(1.0 + m.m00 - m.m11 - m.m22) * 2; // S=4*qx
- dest.w = (m.m12 - m.m21) / S;
- dest.x = 0.25f * S;
- dest.y = (m.m10 + m.m01) / S;
- dest.z = (m.m20 + m.m02) / S;
- } else if (m.m11 > m.m22) {
- float S = (float) Math.sqrt(1.0 + m.m11 - m.m00 - m.m22) * 2; // S=4*qy
- dest.w = (m.m20 - m.m02) / S;
- dest.x = (m.m10 + m.m01) / S;
- dest.y = 0.25f * S;
- dest.z = (m.m21 + m.m12) / S;
- } else {
- float S = (float) Math.sqrt(1.0 + m.m22 - m.m00 - m.m11) * 2; // S=4*qz
- dest.w = (m.m01 - m.m10) / S;
- dest.x = (m.m20 + m.m02) / S;
- dest.y = (m.m21 + m.m12) / S;
- dest.z = 0.25f * S;
- }
- return dest;
- }
- @GarbageFree
- public static Vector3f matrixToScale(Matrix4f m, Vector3f dest) {
- if (dest == null) {
- dest = new Vector3f();
- }
- dest.x = (float)Math.sqrt(m.m00*m.m00 + m.m01*m.m01 + m.m02*m.m02);
- dest.y = (float)Math.sqrt(m.m10*m.m10 + m.m11*m.m11 + m.m12*m.m12);
- dest.z = (float)Math.sqrt(m.m20*m.m20 + m.m21*m.m21 + m.m22*m.m22);
- return dest;
- }
- @GarbageFree
- public static Vector3f matrixToTranslation(Matrix4f m, Vector3f dest) {
- if (dest == null) {
- dest = new Vector3f();
- }
- dest.x = m.m30;
- dest.y = m.m31;
- dest.z = m.m32;
- return dest;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement