FPS Camera

Started by
4 comments, last by MohammadAhmed 11 years ago

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
Advertisement

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

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).

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

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.

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

This topic is closed to new replies.

Advertisement