1

I am trying to rotate an object around the world axis. I've found this question: How to rotate a object on axis world three.js?

But it didn't solve the problem by using this function:

var rotWorldMatrix;

// Rotate an object around an arbitrary axis in world space       
function rotateAroundWorldAxis(object, axis, radians) {
    rotWorldMatrix = new THREE.Matrix4();
    rotWorldMatrix.makeRotationAxis(axis.normalize(), radians);
    rotWorldMatrix.multiplySelf(object.matrix);        // pre-multiply
    object.matrix = rotWorldMatrix;
    object.rotation.getRotationFromMatrix(object.matrix, object.scale);
}

multiplySelf and getRotationFromMatrix are not defined (I'm getting a console error). How to fix the problem?

Update

I tried to use Quaternion, but it doesn't seem to behave correctly. I'm trying to rotate an object according to the user click, this is the function that I've written:

function mouseUp(event) {
    var x= event.clientX;
    var y= event.clientY;
    var dx= (x - xBegin);
    var dy= (y - yBegin);

    var quaternion= new THREE.Quaternion();
    quaternion.setFromAxisAngle(new THREE.Quaternion(dy,dx,0).normalize(),Math.sqrt(dx*dx+dy*dy)/250.0);
    object.quaternion.multiplyQuaternions(quaternion,object.quaternion);
}

It rotates correctly as long as the object is in vertical or horizontal position, but if it's for example at 45 degrees from the x axis, it rotates very slowly and in the opposite direction of the click.

Community
  • 1
  • 1
Ramy Al Zuhouri
  • 21,580
  • 26
  • 105
  • 187

1 Answers1

6

As long as the object does not have a rotated parent, you can rotate the object around a world axis like so:

object.rotateOnWorldAxis( axis, angle );

axis must be normalized (have unit length); angle is in radians.

three.js r.92

WestLangley
  • 102,557
  • 10
  • 276
  • 276
  • Thank you for the reply. Could you see my edit? I tried to use Quaternion to rotate an objects simultaneously around the x and y axis (according to the user gesture), but it doesn't rotate the object correctly. – Ramy Al Zuhouri Oct 15 '13 at 19:48
  • Please do not change the question after it has been answered. I answered your original question. Please accept this answer, and if you are having additional problems, please make a new post... I expect you can figure out the problem yourself, anyway -- you are passing in a `Quaternion` where you should be passing in a `Vector3`. – WestLangley Oct 15 '13 at 23:19