diff --git a/examples/js/controls/TransformControls.js b/examples/js/controls/TransformControls.js index 0ec1f4bac3fb96379528a94bf3e25d8f9fc49c76..e7888295128b2f1dc2aec5e990c1c2c6a74498f5 100644 --- a/examples/js/controls/TransformControls.js +++ b/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 ) ); } diff --git a/src/math/Rotation.js b/src/math/Rotation.js index 43d07bc3c596bb4ea7439c4c07c159788e4a50d2..32b9363a6b7f9613a9e3a79ee60a40f6bb69fadc 100644 --- a/src/math/Rotation.js +++ b/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 () {