I have my object’s rotation and translation in a quaternion, which I’ve converted to a matrix[16].
How do I feed that matrix to OpenGL? I’d-a thought I could just glLoadMatrix() with my new, fancy-pants matrix and all would be good, but I’m getting a blank screen.
(I’m a bit of a GL n00b, so type slowly and use small words 😉
My code looks something like this:
glPushMatrix();
[quaternion makeIdentity]; // reset quat
[quaternion setPitch: rotation.x yaw: rotation.y roll: rotation.z]; // Set up with rotation coords (NOTE: setPitch:yaw:roll: is smart about degrees->radians)
GLdouble matrix[16];
[quaternion matrix: &matrix[0]]; // get quat -> matrix
matrix[12] = location.x; // fill in the translation
matrix[13] = location.y;
matrix[14] = location.z;
glLoadMatrixd(matrix);
glScaled(scale.x, scale.y, scale.z);
// draw geometry here -- snip
glPopMatrix();
I think I’m pretty close but, when I use this code, I get a blank display (everything is glClearColor.)
NOTE: when I skip the quaternion part and do something like this:
glPushMatrix();
glTranslatef(location.x, location.y, location.z);
glRotated(rotation.z, 0, 0, 1.0);
glRotated(rotation.x, 1.0, 0, 0);
glRotated(rotation.y, 0, 1.0, 0);
// draw geometry here -- snip
glPopMatrix();
the display is as expected. The only problem is that my rotations are screwy, due to being applied sequentially. Hence my desire to use quaternions.
If you don’t forgot to set current matrix mode to
GL_MODELVIEW, your matrix should be loaded correctly. Check your quat -> matrix calculations. I’d start from rotation by zero angle and comparing result with identity matrix.