Sign in to follow this  
MohammadAhmed

FPS Camera

Recommended Posts

MohammadAhmed    279

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 :


8x6lda07jcnf3na6g.jpg
 
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 :
dhk5taecpo6k6mp6g.jpg
Edited by mrmohadnan

Share this post


Link to post
Share on other sites
MohammadAhmed    279

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))
            {
                cci.Camera.Pitch += MathHelper.ToRadians(1);
            }
            if (cci.Camera.Pitch >= MathHelper.ToRadians(40))
            {
                cci.Camera.Pitch -= MathHelper.ToRadians(1);
            }

            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))
            {
                cci.Camera.Pitch += MathHelper.ToRadians(1);
            }
            if (cci.Camera.Pitch >= MathHelper.ToRadians(40))
            {
                cci.Camera.Pitch -= MathHelper.ToRadians(1);
            } 

 

8x6lda07jcnf3na6g.jpg

Edited by mrmohadnan

Share this post


Link to post
Share on other sites
eppo    4877

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 this post


Link to post
Share on other sites
belfegor    2834

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 this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this