# OpenGL pitching problem

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;

{
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);
} 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);

• why not use a math lib like glm to do the matrix math. It'll let you drop the deprecated calls. Oct 16 '15 at 10:31

Found the problem. It was needed to update the up vector during pitching.

void rotatePitch(double rotationAngle)
{
glPushMatrix(); {
glRotatef(rotationAngle, dirRight.x, dirRight.y, dirRight.z);