From f8a08a41b1178656bcf7eb9fea6311072746800c Mon Sep 17 00:00:00 2001 From: Onek8 Date: Wed, 9 Apr 2025 15:02:07 +0000 Subject: [PATCH] Update leenkx/Sources/iron/math/Quat.hx --- leenkx/Sources/iron/math/Quat.hx | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/leenkx/Sources/iron/math/Quat.hx b/leenkx/Sources/iron/math/Quat.hx index 6a8cce9..0d059e2 100644 --- a/leenkx/Sources/iron/math/Quat.hx +++ b/leenkx/Sources/iron/math/Quat.hx @@ -399,17 +399,33 @@ class Quat { @return This quaternion. **/ public inline function fromEulerOrdered(e: Vec4, order: String): Quat { - var c1 = Math.cos(e.x / 2); - var c2 = Math.cos(e.y / 2); - var c3 = Math.cos(e.z / 2); - var s1 = Math.sin(e.x / 2); - var s2 = Math.sin(e.y / 2); - var s3 = Math.sin(e.z / 2); - + + var mappedAngles = new Vec4(); + switch (order) { + case "XYZ": + mappedAngles.set(e.x, e.y, e.z); + case "XZY": + mappedAngles.set(e.x, e.z, e.y); + case "YXZ": + mappedAngles.set(e.y, e.x, e.z); + case "YZX": + mappedAngles.set(e.y, e.z, e.x); + case "ZXY": + mappedAngles.set(e.z, e.x, e.y); + case "ZYX": + mappedAngles.set(e.z, e.y, e.x); + } + var c1 = Math.cos(mappedAngles.x / 2); + var c2 = Math.cos(mappedAngles.y / 2); + var c3 = Math.cos(mappedAngles.z / 2); + var s1 = Math.sin(mappedAngles.x / 2); + var s2 = Math.sin(mappedAngles.y / 2); + var s3 = Math.sin(mappedAngles.z / 2); var qx = new Quat(s1, 0, 0, c1); var qy = new Quat(0, s2, 0, c2); var qz = new Quat(0, 0, s3, c3); + // Original multiplication sequence (implements reverse of 'order') if (order.charAt(2) == 'X') this.setFrom(qx); else if (order.charAt(2) == 'Y') @@ -429,7 +445,7 @@ class Quat { else this.mult(qz); - // TO DO quick fix doesnt make sense. + // TO DO quick fix somethings wrong.. this.x = -this.x; this.y = -this.y; this.z = -this.z;