@GClements Hello, I hope you’re doing very well.
Well, that did work perfectly.
2 months ago, I drew the object and then I drew the frame which is attached to it. I did exactly as you suggested and the object rotated around the axes of the new coordinate system ( the coordinate system which I changed the orientation of its axes).
Now, here is what I did.
I started drawing the standard coordinate system, then applied transformations( I changed the orientation of its axes using rotations) . This coordinate system is a fixed one.
QMatrix4x4 localMatrix;
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projection.constData());
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(localMatrix.constData());
gluLookAt(2.0,2.0,0.0, 0.0,0.0,-5.0,0.0,1.0,0.0);
glTranslatef(0.0,0.0,-5.0);
glRotatef(180.0,0.0,1.0,0.0); // changing the orientation of its axes
glRotatef(-90.0,1.0,0.0,0.0); // again changing the orientation of its axes
glScalef(0.4,0.4,0.4);
DrawOrbitalFrame(); // drawing the fixed coordinate system
Then I drew the textured object using shaders.
My goal was to make the object rotate around the axes of the fixed coordinate system ( after changing its axes orientation) using quaternions of course.
However when I run my program and set the quaternion values as follows:
w=0.7, x=0.0, y=0.7, z=0.0, which is equivalent to a rotation of 90° around the y-axis.
The object rotates around the y-axis of the standard coordinate system ( the default OpenGL coordinate system) and not the y-axis of the fixed coordinate system I drew and changed its axes orientation.
So I thought about applying the same transformations as I did when drawing the fixed coordinate system at first, before drawing the object:
I did this:
localMatrix.rotate(180.0,0.0,1.0,0.0); // same rotation as the one applied to the coordinate system at first
localMatrix.rotate(-90.0,1.0,0.0,0.0); // same rotation as the one applied to the coordinate system at first
localMatrix.rotate(quaternion);
Then I drew the object
And that made the object rotate around the new axes of the coordinate system which is the result I’m looking for.
However, I still don’t get why it worked.
If I remove the transformations before drawing the object, apply rotation using a quaternion, the object goes back to rotating around the default OpenGL coordinate system which is the one represented in the picture below:
