quaternions as orientation

Started by
60 comments, last by GameDev.net 18 years, 3 months ago
Anybody know how to use quaternions to orient a mesh in OpenGL?? It does not make sense to me how 3 imaginary numbers and a real number can represent the orientation of a mesh.
Advertisement
First of all, they aren't three imaginary numbers and a real number. They're four real numbers which are used as a single four-dimensional complex number, just as two real numbers can be used as a single two-dimensional complex number.

Secondly, OpenGL does not use quaternions directly. To use quaternions with OpenGL, you generally convert them into rotation matrices.

Thirdly, if you're interested in knowing exactly how quaternions work, rather than just how you can use them, read this.
What you suggest, (using quaternions to orient objects) seems more like a convention to me, rathen than an intuitive/straight forward approach.

Quaternions are used in rotations, because they can uniquely describe an axis (3-vector) and an amount of rotation around that axis. The only possible way I see, to determine an orientation from a quaternion, is *to make a convention* that the rotation axis should always represent the "look-at" axis of your object (this one is usually the local Z axis), and the remaining scalar part should represent the 'roll angle' of your object around that axis. This is enough information to uniquely describe an orientation in 3d space.

edit:
I'm tired of posting this, but you'll probably need it...

To convert the quaternion to a DCM matrix (orientation) do the following:
Define vectors: localX, localY, localZ to store the object's local axes
localZ = Normalize( quaternion rotation axis {x,y,z} );
localX = cross( localZ, 'unit world up vector' );
localY = cross( localZ, localX );

The orientation matrix will be the product: R*O,
where R is:
[ cos(w) -sin(w) 0 0 ]
[ sin(w) cos(w) 0 0 ]
[ 0 0 1 0 ]
[ 0 0 0 1 ]


and O is:
[ localX.x localY.x localZ.x 0 ]
[ localX.y localY.y localZ.y 0 ]
[ localX.z localY.z localZ.z 0 ]
[ 0 0 0 1 ]

This is the DCM matrix for your object.
If you are using a left-handed system, negate the results of the cross products, and if you work with row-vectors instead of columns, use the transpose of that product.

Btw, have you come across this in physics simulation? I've lately discovered that people often choose this approach, to describe the instantaneous axis of an object's rotation and the angle it has rotated by, with respect to its previous state, when solving for the specific time step.

[Edited by - someusername on January 1, 2006 9:36:18 PM]
Quote:Original post by Sneftel
First of all, they aren't three imaginary numbers and a real number. They're four real numbers which are used as a single four-dimensional complex number, just as two real numbers can be used as a single two-dimensional


Isnt it 3 complex numbers and 1 real number. W(X, Y, Z): W being the Real number?
Adventures of a Pro & Hobby Games Programmer - http://neilo-gd.blogspot.com/Twitter - http://twitter.com/neilogd
A "complex number" is a number in complex space (where complex space has 2, 4, or 8 dimensions) that is not a real number. But yeah, it can be thought of as three imaginary numbers and 1 real number. The reason I refer to it as 4 real numbers is to hammer in the point that there are exactly 4 scalar quantities and that quaternions are thus a 4-dimensional space.
Quote:Original post by Sneftel
A "complex number" is a number in complex space (where complex space has 2, 4, or 8 dimensions) that is not a real number. But yeah, it can be thought of as three imaginary numbers and 1 real number. The reason I refer to it as 4 real numbers is to hammer in the point that there are exactly 4 scalar quantities and that quaternions are thus a 4-dimensional space.


Thats not the correct way to refer to them, but its probably the easiest way to work them out! Hell its the way I successfully figured them out!
Adventures of a Pro & Hobby Games Programmer - http://neilo-gd.blogspot.com/Twitter - http://twitter.com/neilogd
? In what way is that not a correct way to refer to them?
Considering quaterions ARE 3 complex numbers, 1 real number, quoting them as anything else is incorrect.
Adventures of a Pro & Hobby Games Programmer - http://neilo-gd.blogspot.com/Twitter - http://twitter.com/neilogd
No they aren't. Each quaternion is an element of a four dimensional normed division algebra over the real numbers. Each quaternion can be represented as linear combinations of four basis quaternions 1, i, j and k, but are each themselves single numbers. Much in the same way x + 1 is a single polynomial even though it is composed of two terms x and 1.
SiCrane is right on this one. If x, y, and z were complex numbers, you'd be allowed to write a quaternion such as (1, -3.5i, 2+7i, -12.1). You can't. All 4 values must be real-valued.

Now, when talking about complex and hypercomplex numbers, one of the values is referred to as the real part and the others the imaginary part.

You can see the nomenclature in use at Mathworld:
http://mathworld.wolfram.com/Quaternion.html

It clearly states that the 4 numbers are real. It mentions the real & imaginary part. It even shows a representations of quaternions as 4 complex numbers in a 2x2 matrix.

This topic is closed to new replies.

Advertisement