Browse Source

Fixed Euler/Rotation change breakage.

Mr.doob 12 years ago
parent
commit
8edd6bd0a8
2 changed files with 58 additions and 16 deletions
  1. 7 15
      examples/js/controls/TransformControls.js
  2. 51 1
      src/math/Rotation.js

+ 7 - 15
examples/js/controls/TransformControls.js

@@ -67,10 +67,10 @@ THREE.TransformControls = function ( camera, domElement, doc ) {
 	var parentScale = new THREE.Vector3();
 
 	var worldPosition = new THREE.Vector3();
-	var worldRotation = new THREE.Vector3();
+	var worldRotation = new THREE.Euler();
 	var worldRotationMatrix  = new THREE.Matrix4();
 	var camPosition = new THREE.Vector3();
-	var camRotation = new THREE.Vector3();
+	var camRotation = new THREE.Euler();
 
 	var displayAxes = {};
 	var pickerAxes = {};
@@ -379,11 +379,11 @@ THREE.TransformControls = function ( camera, domElement, doc ) {
 
 		this.object.updateMatrixWorld();
 		worldPosition.getPositionFromMatrix( this.object.matrixWorld );
-		worldRotation.setFromRotationMatrix( tempMatrix.extractRotation(this.object.matrixWorld ));
+		worldRotation.setFromRotationMatrix( tempMatrix.extractRotation( this.object.matrixWorld ) );
 
 		this.camera.updateMatrixWorld();
 		camPosition.getPositionFromMatrix( this.camera.matrixWorld );
-		camRotation.setFromRotationMatrix( tempMatrix.extractRotation( this.camera.matrixWorld ));
+		camRotation.setFromRotationMatrix( tempMatrix.extractRotation( this.camera.matrixWorld ) );
 
 		scale = worldPosition.distanceTo( camPosition ) / 6 * this.scale;
 		this.gizmo.position.copy( worldPosition )
@@ -437,17 +437,9 @@ THREE.TransformControls = function ( camera, domElement, doc ) {
 
 						object.rotation.set( 0, 0, 0 );
 
-						if ( name == 'RX' ) {
-							object.rotation.setX( Math.atan2( -eye.y, eye.z ) );
-						}
-
-						if ( name == 'RY' ) {
-							object.rotation.setY( Math.atan2( eye.x, eye.z ) );
-						}
-
-						if ( name == 'RZ' ) {
-							object.rotation.setZ( Math.atan2( eye.y, eye.x ) );
-						}
+						if ( name == 'RX' ) object.rotation.setX( Math.atan2( -eye.y, eye.z ) );
+						if ( name == 'RY' ) object.rotation.setY( Math.atan2( eye.x, eye.z ) );
+						if ( name == 'RZ' ) object.rotation.setZ( Math.atan2( eye.y, eye.x ) );
 
 					}
 

+ 51 - 1
src/math/Rotation.js

@@ -51,6 +51,8 @@ THREE.Rotation.prototype = {
 
 	},
 
+	//
+
 	set: function ( x, y, z ) {
 
 		this.euler.x = x;
@@ -59,6 +61,50 @@ THREE.Rotation.prototype = {
 
 		this.quaternion.setFromEuler( this.euler );
 
+		return this;
+
+	},
+
+	setX: function ( x ) {
+
+		this.x = x;
+
+		return this;
+
+	},
+
+	setY: function ( y ) {
+
+		this.y = y;
+
+		return this;
+
+	},
+
+	setZ: function ( z ) {
+
+		this.z = z;
+
+		return this;
+
+	},
+
+	setFromRotationMatrix: function ( m, order ) {
+
+		this.euler.setFromRotationMatrix( m, order );
+		this.quaternion.setFromEuler( this.euler );
+
+		return this;
+
+	},
+
+	setFromQuaternion: function ( q, order ) {
+
+		this.euler.setFromQuaternion( q, order );
+		this.quaternion.copy( q );
+
+		return this;
+
 	},
 
 	copy: function ( rotation ) {
@@ -66,13 +112,17 @@ THREE.Rotation.prototype = {
 		this.euler.copy( rotation.euler );
 		this.quaternion.setFromEuler( this.euler );
 
+		return this;
+
 	},
 
-	fromArray: function( array ) {
+	fromArray: function ( array ) {
 
 		this.euler.fromArray( array );
 		this.quaternion.setFromEuler( this.euler );
 
+		return this;
+
 	},
 
 	toArray: function () {