I've been trying to implement several camera movements for my application. So far yawing, rolling, strafing, walking has been working properly, but I can't get my pitching to work properly. If I continue pitching upwards, it doesn't rotate back 360 degree, and instead gets stuck looking at the top of the screen.
Here's my code for Camera class
class Camera
{
float m[16];
Vector dirForward, dirUp, dirRight;
void loadCameraDirections()
{
glGetFloatv(GL_MODELVIEW_MATRIX, m);
dirForward = Vector(m[2], m[6], m[10]).unitVector();
dirUp = Vector(m[1], m[5], m[9]).unitVector();
dirRight = Vector(m[0], m[4], m[8]).unitVector();
}
public:
Vector position;
Vector lookAt;
Vector up;
Camera()
{
position = Vector(300, 0, 100);
lookAt = Vector(0, 0, 100);
up = Vector(0, 0, 1);
}
void rotatePitch(double rotationAngle)
{
glPushMatrix(); {
glRotatef(rotationAngle, dirRight.x, dirRight.y, dirRight.z);
loadCameraDirections();
} glPopMatrix();
lookAt = position.repositionBy(dirForward.reverseVector());
}
}cam;
I call the gluLookAt funtion by-
gluLookAt(cam.position.x, cam.position.y, cam.position.z, cam.lookAt.x, cam.lookAt.y, cam.lookAt.z, cam.up.x, cam.up.y, cam.up.z);