# FPS Camera

This topic is 1737 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello every one ,

In previous post "http://www.gamedev.net/topic/640972-skinned-animation-problem/"I faced problem related to rotation the weapon around the with the camera and position the weapon in front of camera  , I solve it by :

1 : Before export the Model from Blender , I first make sure to position it in (0,0,0) , then make sure it's up axis is Y-axis and make sure it face x-axis .

but the problem now is :
1 :  When I make rotation around the pitch axis it did not behave pretty and good .
2 : When I make rotation around the pitch axis by 180 I see the model hands in front of my camera !! how and see through the Weapon and hand.

This is the edited code :

Vector3 forward = cci.Camera.WorldMatrix.Forward + new Vector3(0, -5, 0);
Matrix translatePlayer = Matrix.CreateTranslation(cci.Camera.WorldMatrix.Translation+ forward);
Matrix scalePlayer = Matrix.CreateScale(0.05f);
Matrix rotatePlayer = Matrix.CreateFromAxisAngle(cci.Camera.WorldMatrix.Left,
cci.Camera.Pitch) * Matrix.CreateFromAxisAngle(Vector3.Up, cci.Camera.Yaw);
staticModel.Transform = scalePlayer * rotatePlayer * translatePlayer ;


and here 2 explanation photos :
1 : When start the game :

2 : After I make rotation around the y-axis for example 130 degree then I make rotation around the pitch axis by 30 degree see what happens :

##### Share on other sites

Hello again , I solve the rotation problem by :

            Vector3 forward = cci.Camera.WorldMatrix.Forward + new Vector3(0, -1, 0);

if (cci.Camera.Pitch <= MathHelper.ToRadians(-40))
{
}
if (cci.Camera.Pitch >= MathHelper.ToRadians(40))
{
}

Matrix translatePlayer = Matrix.CreateTranslation(cci.Camera.WorldMatrix.Translation + forward);
Matrix scalePlayer = Matrix.CreateScale(0.05f);

Matrix rotatePlayer = Matrix.CreateRotationX(cci.Camera.Pitch) *
Matrix.CreateFromAxisAngle(Vector3.Up, cci.Camera.Yaw);
staticModel.Transform = scalePlayer * rotatePlayer * translatePlayer ;


but , all what I want is to prevent hands to be visible when rotating down , I try this code  and did not works good ? so any solutions or suggestion ?



if (cci.Camera.Pitch <= MathHelper.ToRadians(-40))
{
}
if (cci.Camera.Pitch >= MathHelper.ToRadians(40))
{
}



##### Share on other sites

It might be a good idea to read up on nested transformation spaces. Link.

This can be solved a lot easier by parenting the gun to the hand by transforming its local transformation by the hand's world transform.

Matrix gunWorld = gunLocal * handWorld. (where handWorld = handLocal * playerWorld).

The camera can then be attached to the gun: cameraWorld = cameraLocal * gunWorld. -> cameraView = inverse(cameraWorld).

##### Share on other sites

I see through hands !!! this is my problem  ? so any suggestions how to play with the pitch or other transformation to prevent this ?

##### Share on other sites

Decrease your near clip plane.

Also, your model must be "properly" designed for first person view, if not you might need to reposition it a little bit down so that there is a small chance to intersects with your near clip plane.

Edited by belfegor

##### Share on other sites

Thanks belfegor you helped me a lot ,  I will never forget your help , good luck.