You are not using the class correctly.
Pitch - Rotation about the x axis - in an airplane, the up and down motion of the aircraft in respect to the horizon. Alters the thrust vector of the aircraft or the forward motion of the aircraft and displaces the lift (up) vector.
Yaw - Rotation about the Y axis - in an airplane, the side to side or what is known as yaw motion in an aircraft - created when the rudder is deflected from neutral position.
Roll - Rotation about the Z axis - in an airplane, - bank angle of the wings with respect to 0 degree upright flight - when the lift vector of the aircraft is exact opposite that of gravity or is facing straight up at 90 degrees and is perpendicularl to the earth's surface at all times (theoretically)
The camera class has everything you need to alter these. You should NOT be touching the 3 basis vectors.
Right 1.0f,0.0f,0.0f
Up -> 0.0f,1.0f,0.0f
Look -> 0.0f,0.0f,1.0f
Walking can be accomplished via the Camera::walk() function or by translating along the positive look vector for forward, or negative look vector for backwards. Sliding can be accomplished by writing a function that will translate the camera along the right vector or the negative right vector. Flying/Jumping/Ducking can be accomplished by translating along the up vector or the negative up vector.
These three basis vectors are always orthogonal and they are always pointing in the right direction. So if you pitch up 35 degrees and roll 35 degrees - the look vector is pointing up 35 degrees so when you move forward, you are still moving exactly where the camera is pointing. So no matter camera orientation, up is always up, right is always right, and look is always look.
Note that if you specify Camera::LandObject - you can only walk in one plane - you cannot traverse planes unless you have a plane to walk on, just like on earth.
With Camera::AirObject you can rotate around any axis and number of degrees and the object will NOT undergo gimbal lock. This is handled by using axis rotations or rotations about an arbitrary axis.
If you wish to make the camera swing around an object simply translate out away from the object a set distance and then transform using the camera view matrix.
Note that you can use these transformations for all objects in a game. It makes it a lot easier when you when object A to rotate this way or that and then move forward. This is a simple Yaw() followed by a Walk().
This code will accomplish mouse look for you.
Code:
void GetMouseInput(void)
{
//Mouse input
LONG lx, ly, cx, cy;
//Get info from mouse
Mouse->Update();
//Get last mouse position
Mouse->GetMousePosition(&lx,&ly,LAST);
//Get current mouse position
Mouse->GetMousePosition(&cx,&cy,CURRENT);
//Debug section only
#ifdef DEBUG_MODE
char txt[80];
sprintf(txt,"X:%u Y:%u LX:%u LY:%u",lx,ly,cx,cy);
DebugFont->DrawText(900,10,0xFFFFFFFF,txt);
#endif
//Find difference between last and current position
int diffx=cx-lx;
int diffy=cy-ly;
//Adjust for sensitivity - could also use frametime
float movex=((float)diffx*.005f);
float movey=((float)diffy*.005f);
//Rotate around Y axis - turn left/right
TheCamera.yaw(movex);
//Rotate around X axis - look up/down
TheCamera.pitch(movey);
}
You will need this version of the mouse class for the code to work. I changed some things to allow easier retrieval of the current and the last position of the mouse. It will save the last position of the mouse prior to the mouse being moved to a new location. When the mouse is moved again, it will save, and move. Essentially the former current position is now the last.
The coefficent I multiply for mouse movement will directly affect the sensitivity of the mouse. You should probably allow the player to alter this value within a pre-set range so they can adjust it to their liking.