GPSnoopy

09-30-2003, 09:47 PM

AFAIK either using Euler angles rotations or quaternions you still end up doing rotations using the regular world coordinate system.

But, for example, when a plane makes a roll or a pitch it's around its own axis. So that rotations are always relative to its own local system.

I haven't tested yet but it seems to me that the following would lead to the right result:

vector3 XAxis = (1, 0, 0);

vector3 YAxis = (0, 1, 0);

vector3 ZAxis = (0, 0, 1);

vector3 LocalXAxis = XAxis;

matrix4 PitchMatrix = Rotate(Pitch, LocalXAxis);

vector3 LocalYAxis = PitchMatrix * YAxis;

matrix4 RollMatrix = Rotate(Roll, LocalYAxis);

vector3 LocalZAxis = PitchMatrix * RollMatrix * ZAxis;

matrix4 YawnMatrix = Rotate(Yawn, LocalZAxis);

So it would give LocalRotation(Pitch, Roll, Yawn) = PitchMatrix * RollMatrix * YawnMatrix.

Does this seems correct?

If it is, isn't their any other (and preferably more efficient) way of doing this?

But, for example, when a plane makes a roll or a pitch it's around its own axis. So that rotations are always relative to its own local system.

I haven't tested yet but it seems to me that the following would lead to the right result:

vector3 XAxis = (1, 0, 0);

vector3 YAxis = (0, 1, 0);

vector3 ZAxis = (0, 0, 1);

vector3 LocalXAxis = XAxis;

matrix4 PitchMatrix = Rotate(Pitch, LocalXAxis);

vector3 LocalYAxis = PitchMatrix * YAxis;

matrix4 RollMatrix = Rotate(Roll, LocalYAxis);

vector3 LocalZAxis = PitchMatrix * RollMatrix * ZAxis;

matrix4 YawnMatrix = Rotate(Yawn, LocalZAxis);

So it would give LocalRotation(Pitch, Roll, Yawn) = PitchMatrix * RollMatrix * YawnMatrix.

Does this seems correct?

If it is, isn't their any other (and preferably more efficient) way of doing this?