I want to rotate my "camera" around a point of interest. Currently the camera only rotates around the origin.

The standard way:

Code :
    translate(-P)
    rotate
    translate(P)

Unfortunately, this doesn't work. My application uses a translation vector (QVector3D) as well as a quaternion (QQuaternion) to save translation and rotation of the camera.


Currently, it is done like this, which always rotates around the origin:


Code :
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(translation.x(),translation.y(), translation.z());
    multMatrix(accumulatedQuaternionRotation);


where mulMatrix uses the Quaternion to build a 4x4 matrix which is passed to glMultMatrixf();


Using something like this:


Code :
    glTranslatef(-translation.x(),-translation.y(), -translation.z());
    multMatrix(accumulatedQuaternionRotation);
    glTranslatef(translation.x(),translation.y(), translation.z());


results in very weird controls which I'm unable to describe further. In my application translation.z() means: move the camera forward. Changing x() and y() issues a pan like operation.

Help is greatly appreciated. :)