瀏覽代碼

Fix parameters of Quaternion.setFromEuler and Matrix4.makeRotationFromEuler, throw on old parameters use.

Ondřej Španěl 7 年之前
父節點
當前提交
76b2ff4aed
共有 3 個文件被更改,包括 26 次插入11 次删除
  1. 5 1
      src/math/Matrix4.js
  2. 5 0
      src/math/Quaternion.js
  3. 16 10
      test/unit/src/math/Quaternion.tests.js

+ 5 - 1
src/math/Matrix4.js

@@ -150,13 +150,17 @@ Object.assign( Matrix4.prototype, {
 
 
 	}(),
 	}(),
 
 
-	makeRotationFromEuler: function ( euler ) {
+	makeRotationFromEuler: function ( euler, order ) {
 
 
 		if ( ! ( euler && euler.isEuler ) ) {
 		if ( ! ( euler && euler.isEuler ) ) {
 
 
 			console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );
 			console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );
 
 
 		}
 		}
+		if ( order ) {
+
+			throw new Error( 'THREE.Matrix4: .makeRotationFromEuler() no longer accepts order as the second parameter.' );
+		}
 
 
 		var te = this.elements;
 		var te = this.elements;
 
 

+ 5 - 0
src/math/Quaternion.js

@@ -202,6 +202,11 @@ Object.assign( Quaternion.prototype, {
 
 
 		}
 		}
 
 
+		if ( typeof update === 'string' || update instanceof String ) {
+
+			throw new Error( 'THREE.Quaternion: .setFromEuler() no longer accepts order as the second parameter.' );
+		}
+
 		var x = euler._x, y = euler._y, z = euler._z, order = euler.order;
 		var x = euler._x, y = euler._y, z = euler._z, order = euler.order;
 
 
 		// http://www.mathworks.com/matlabcentral/fileexchange/
 		// http://www.mathworks.com/matlabcentral/fileexchange/

+ 16 - 10
test/unit/src/math/Quaternion.tests.js

@@ -160,6 +160,12 @@ function slerpTestSkeleton( doSlerp, maxError, assert ) {
 
 
 }
 }
 
 
+function changeEulerOrder( euler, order ) {
+
+	return new Euler( euler.x, euler.y, euler.z, order );
+
+}
+
 export default QUnit.module( 'Maths', () => {
 export default QUnit.module( 'Maths', () => {
 
 
 	QUnit.module( 'Quaternion', () => {
 	QUnit.module( 'Quaternion', () => {
@@ -332,8 +338,8 @@ export default QUnit.module( 'Maths', () => {
 			// ensure euler conversion for Quaternion matches that of Matrix4
 			// ensure euler conversion for Quaternion matches that of Matrix4
 			for ( var i = 0; i < orders.length; i ++ ) {
 			for ( var i = 0; i < orders.length; i ++ ) {
 
 
-				var q = new Quaternion().setFromEuler( eulerAngles, orders[ i ] );
-				var m = new Matrix4().makeRotationFromEuler( eulerAngles, orders[ i ] );
+				var q = new Quaternion().setFromEuler( changeEulerOrder( eulerAngles, orders[ i ] ) );
+				var m = new Matrix4().makeRotationFromEuler( changeEulerOrder( eulerAngles, orders[ i ] ) );
 				var q2 = new Quaternion().setFromRotationMatrix( m );
 				var q2 = new Quaternion().setFromRotationMatrix( m );
 
 
 				assert.ok( qSub( q, q2 ).length() < 0.001, "Passed!" );
 				assert.ok( qSub( q, q2 ).length() < 0.001, "Passed!" );
@@ -450,15 +456,15 @@ export default QUnit.module( 'Maths', () => {
 
 
 			var angles = [ new Euler( 1, 0, 0 ), new Euler( 0, 1, 0 ), new Euler( 0, 0, 1 ) ];
 			var angles = [ new Euler( 1, 0, 0 ), new Euler( 0, 1, 0 ), new Euler( 0, 0, 1 ) ];
 
 
-			var q1 = new Quaternion().setFromEuler( angles[ 0 ], "XYZ" );
-			var q2 = new Quaternion().setFromEuler( angles[ 1 ], "XYZ" );
-			var q3 = new Quaternion().setFromEuler( angles[ 2 ], "XYZ" );
+			var q1 = new Quaternion().setFromEuler( changeEulerOrder( angles[ 0 ], "XYZ" ) );
+			var q2 = new Quaternion().setFromEuler( changeEulerOrder( angles[ 1 ], "XYZ" ) );
+			var q3 = new Quaternion().setFromEuler( changeEulerOrder( angles[ 2 ], "XYZ" ) );
 
 
 			var q = new Quaternion().multiplyQuaternions( q1, q2 ).multiply( q3 );
 			var q = new Quaternion().multiplyQuaternions( q1, q2 ).multiply( q3 );
 
 
-			var m1 = new Matrix4().makeRotationFromEuler( angles[ 0 ], "XYZ" );
-			var m2 = new Matrix4().makeRotationFromEuler( angles[ 1 ], "XYZ" );
-			var m3 = new Matrix4().makeRotationFromEuler( angles[ 2 ], "XYZ" );
+			var m1 = new Matrix4().makeRotationFromEuler( changeEulerOrder( angles[ 0 ], "XYZ" ) );
+			var m2 = new Matrix4().makeRotationFromEuler( changeEulerOrder( angles[ 1 ], "XYZ" ) );
+			var m3 = new Matrix4().makeRotationFromEuler( changeEulerOrder( angles[ 2 ], "XYZ" ) );
 
 
 			var m = new Matrix4().multiplyMatrices( m1, m2 ).multiply( m3 );
 			var m = new Matrix4().multiplyMatrices( m1, m2 ).multiply( m3 );
 
 
@@ -563,8 +569,8 @@ export default QUnit.module( 'Maths', () => {
 
 
 				for ( var j = 0; j < angles.length; j ++ ) {
 				for ( var j = 0; j < angles.length; j ++ ) {
 
 
-					var q = new Quaternion().setFromEuler( angles[ j ], orders[ i ] );
-					var m = new Matrix4().makeRotationFromEuler( angles[ j ], orders[ i ] );
+					var q = new Quaternion().setFromEuler( changeEulerOrder( angles[ j ], orders[ i ] ) );
+					var m = new Matrix4().makeRotationFromEuler( changeEulerOrder( angles[ j ], orders[ i ] ) );
 
 
 					var v0 = new Vector3( 1, 0, 0 );
 					var v0 = new Vector3( 1, 0, 0 );
 					var qv = v0.clone().applyQuaternion( q );
 					var qv = v0.clone().applyQuaternion( q );