I am trying to make the camera unable to turn 360 to the x axis, so my camera can fixed to looking from top to bottom only (not allowing look backward except turn around base on y axis). the code below is how i rotate my camera base on x axis, and i can’t figure out how can i limit the camera that won’t look beyong 180.

```
void Camera::RotateX(float angle)
{
float radians = angle*PI/180.0f;
CVec3df v1 = upward * (-(float)sin(radians));
CVec3df v2 = forward * ((float)cos(radians));
forward = (v1 + v2).normalise();
upward = forward.cross(left).normalise();
}
```

Don’t you simply add a line at the top:

if (angle > 180.0F) angle = 180.0F;

float radians = …

or am I missing something?

the value of angle is the amount of angle going to turn not turn to which angle. this is the input, i think i got somethings wrong in my implementation but i am not sure what

void handleMouseMotion(int x, int y)

{

```
POINT pointCursorPos; // declare a point
// mouse position tracking
GetCursorPos(&pointCursorPos); // get current point position
int xCenter = currentWidth/2;
int yCenter = currentHeight/2;
int delX = xCenter - pointCursorPos.x;
int delY = pointCursorPos.y - yCenter;
if (!(delX || delY))
return;
cam.RotateX(delY*sensitivity);
cam.RotateY(delX*sensitivity);
SetCursorPos(xCenter, yCenter);
```

}

```
void Camera::RotateX(float angle)
{
float radians = angle*PI/180.0f;
CVec3df v1 = upward * (-(float)sin(radians));
CVec3df v2 = forward * ((float)cos(radians));
forward = (v1 + v2).normalise();
upward = forward.cross(left).normalise();
if (upward.y < 0) //we're upside down
{
if (forward.y > 0) //we're looking up
{
forward = CVec3df(0, 1, 0);
}
else //we're looking down
{
forward = CVec3df(0, -1, 0);
}
upward = forward.cross(left).normalise();
}
}
```

Just made that up. Untested

wow, it worked. thanks a lot