瀏覽代碼

Merge pull request #1524 from abow/quat_to_euler

fixed issue with Quaternion.toEulerAnglesToRef
David Catuhe 8 年之前
父節點
當前提交
a946b6bcc2
共有 1 個文件被更改,包括 8 次插入13 次删除
  1. 8 13
      src/Math/babylon.math.ts

+ 8 - 13
src/Math/babylon.math.ts

@@ -1925,24 +1925,19 @@
 
         public toEulerAnglesToRef(result: Vector3, order = "YZX"): Quaternion {
             
+            var qz = this.z;
             var qx = this.x;
             var qy = this.y;
-            var qz = this.z;
             var qw = this.w;
-            var xsqr = qx * qx;
-
-            var t0 = -2.0 * (xsqr + qy * qy) + 1.0;
-            var t1 = 2.0 * (qz * qx + qw * qy);
-            var t2 = -2.0 * (qz * qy - qw * qx);
-            var t3 = 2.0 * (qx * qy + qw * qz);
-            var t4 = -2.0 * (qz * qz + xsqr) + 1.0;
 
-            t2 = t2 > 1.0 ? 1.0 : t2;
-            t2 = t2 < -1.0 ? -1.0 : t2;
+            var sqw = qw * qw;
+            var sqz = qz * qz;
+            var sqx = qx * qx;
+            var sqy = qy * qy;
 
-            result.x = Math.asin(t2);
-            result.z = Math.atan2(t3, t4);
-            result.y = Math.atan2(t1, t0);
+            result.z = Math.atan2(2.0 * (qx * qy + qz * qw), (-sqz - sqx + sqy + sqw));
+            result.x = Math.asin(-2.0 * (qz * qy - qx * qw));
+            result.y = Math.atan2(2.0 * (qz * qx + qy * qw), (sqz - sqx - sqy + sqw));
 
             return this;