O'Reilly logo

Learning XNA 3.0 by Aaron Reed

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Moving in a First-Person Camera

With the cameraDirection vector being normalized and representing the direction in which the camera is looking, you can easily move the camera forward by simply adding the cameraDirection to the cameraPosition. Doing this will move the camera toward the camera's target in a straight line. Moving backward is just as easy: simply subtract the cameraDirection from the cameraPosition.

Because the cameraDirection vector is normalized (i.e., has a magnitude of one), the camera's speed will always be one. To allow yourself to change the speed of the camera, add a class-level float variable to represent speed:

float speed = 3;

Next, in your Camera class's Update method, add code to move the camera forward and backward with the W and S keys:

// Move forward/backward
if (Keyboard.GetState(  ).IsKeyDown(Keys.W))
    cameraPosition += cameraDirection * speed;
if (Keyboard.GetState(  ).IsKeyDown(Keys.S))
    cameraPosition −= cameraDirection * speed;

At the end of the Update method, you'll want to call your Camera's CreateLookAt method to rebuild the camera based on the changes you've made to its vectors. Add this line of code just above the call to base.Update:

// Recreate the camera view matrix
CreateLookAt(  );

Compile and run the game at this point, and you'll see that when you press the W and S keys, the camera moves closer to and farther from the spaceship. It's important to note what's happening here: in our previous 3D examples, you've moved objects around by changing the ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required