Movement and Rotation

In this section, we'll look at how to move and rotate objects in 3D. In your project, you have a cool triangle. If you want to move this object to the left a little bit, you can do so via the Matrix.CreateTranslation method.

A translation moves an object or a point in a direction specified by a vector. Thus, the CreateTranslation method takes a Vector3 as a parameter. It also has an override that accepts float values for X, Y, and Z.

Now, if you want to actually move your object and/or rotate it continuously rather than just have it change positions and sit still, you'll need a variable to represent your object's world. Create a Matrix variable at the class level in your Game1 class and initialize it to Matrix.Identity:

Matrix world = Matrix.Identity;

Then, modify the line of code in your Draw method where you set the BasicEffect.World property to use this new variable:

effect.World = world;

Next, add the following code to your Update method, just above the call to base.Update:

// Translation
KeyboardState keyboardState = Keyboard.GetState(  );
if (keyboardState.IsKeyDown(Keys.Left))
    world *= Matrix.CreateTranslation(−.01f, 0, 0);
if (keyboardState.IsKeyDown(Keys.Right))
    world *= Matrix.CreateTranslation(.01f, 0, 0);

Compile and run the game now, and you'll notice that when you press the left and right arrow keys, the object moves accordingly.

Get Learning XNA 3.0 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.