mrdoob/three.js — Issue #1254: Rotate a cube around it's edge.
Author: Landlord
Created: 2012-02-05 20:33:10+00:00
State: open

Hi, Everybody!

I was asking already about rotations around an arbitrary axis and got clear answers posted in Issue#1219 and Issue#1220.

But it's still unclear how to rotate a cube around one of it's edges (could anyone to share such a code if it exists).

There were posted two functions in Issue#1219:

function rotateAroundObjectAxis( object, axis, radians ) { .. }

and

function rotateAroundWorldAxis( object, axis, radians ) { .. }

They allow me to rotate a cube about an arbitrary axis that goes through the center of it's bounding box.

What I need is to rotate an object around an arbitrary axis which is not necessarily goes though the object's center.

How to do that correctly?

Sorry, if I'm a bit annoying about that but I want to implement such a functionality.

Thanks.

P.S. It seems that I need a function that looks like:

function rotateAroundArbitraryAxis( object, axisDirection, axisBasePoint, radians ) { .. }

by axisBasePoint I mean the point the specified axis goes through.

I read on the Internet that such a rotation should be done in several steps:

1. translate space so that the rotation axis passes through the origin.
2. rotate space about the Z axis so that the rotation axis lies in the XZ plane.
3. rotate space about the Y axis so that the rotation axis lies along Z axis.
4. perform the desired rotation by Theta about the z axis.
5. apply the inverse of step (3).
6. apply the inverse of step (2).
7. apply the inverse of step (1).

Do I understand it correctly?

How to perform such operation with three.js?

I tried to multiply different (translation/rotation) matrices with each other in three.js but did not get the desired result :-(

Many thanks.