11,490,973 members (72,184 online)

# Managed DirectX Tutorials: Part 8 - Exploring the Terrain with Basic Input

, 26 May 2006 29K 1 28
 Rate this:
Great, we have terrain, but now, in a similar fashion to Dr. Livingstone we must explore this vast terrain

## Rotating Terrain with Basic Matrices Input

Now, we will learn to perform basic input commands on our sample so that we can traverse the island from a "god" camera.
This is only basic matrices input. As I personally get better at this I will add more / update this tutorial.

## Short & Sweet

As we learnt a lot about matrices in the earlier tutorials, we can now add input relatively painlessly.

```public const float rotateSpeed = 2;
public float Zoom = 0.0f;
public float Alpha = 0;
public float Beta = 0;
public float Charlie = 10;```

The first one of these is a modifier which will define how fast we rotate / zoom our terrain. As this is a sample as opposed to a game, we do not need to time it as nothing needs to be balanced. However, it is nice to have a simple member to change to modify the speed.

The next is used, as the name suggests to zoom around the landscape.

The other three are used to rotate the world along its X, Y and Z axes.

Now, at the top of the Paint event handler, add the following lines:

```device.Transform.View = Matrix.LookAtLH ( new Vector3 ( 0, Zoom, 150 ),
new Vector3 ( 0, -5, 0 ), new Vector3 ( 0, 1, 0 ) );
device.Transform.World = Matrix.Translation ( -256 / 2, -256/ 2, 0 )*
Matrix.RotationX ( Alpha ) * Matrix.RotationY ( Beta ) *
Matrix.RotationZ ( Charlie );
```

As you can see, we change the View (camera position)'s Y axis (for different results, try moving the Zoom member to affect different axis).
And then we multiply our world transformation by the rotation values.

Try fiddling around with these to learn more about matrices, putting what we learnt in previous tutorials into practice.

The final part of this short tutorial is to make a system to actually change the values. We will wire up the KeyDown event, for reasons explained in the Base Tutorial (3).

The event simply checks the keys we want, and performs the event needed:

```private void Form1_KeyDown ( object sender, KeyEventArgs e )
{
switch (e.KeyData)
{
case Keys.A:
{
Charlie += 0.01f * rotateSpeed;
} break;
case Keys.D:
{
Charlie -= 0.01f * rotateSpeed;
} break;
case Keys.W:
{
Alpha += 0.01f * rotateSpeed;
} break;
case Keys.S:
{
Alpha -= 0.01f * rotateSpeed;
} break;
case Keys.Left:
{
Beta += 0.01f * rotateSpeed;
} break;
case Keys.Right:
{
Beta -= 0.01f * rotateSpeed;
} break;
case Keys.Up:
{
Zoom += 1f * rotateSpeed;
} break;
case Keys.Down:
{
Zoom -= 1f * rotateSpeed;
} break;
}
} ```

DONT FORGET TO WIRE THE EVENT HANDLER IN THE FORMS CONSTRUCTOR:

`this.KeyDown += new KeyEventHandler(Form1_KeyDown);`

As you can see, we can easily change the speed simply by changing the value assigned to the constant member rotateSpeed, making our sample easily adjustable.

And thats it You now have a rotatable, zoomable landscape. This tutorial was just to give you a little "nudge" into matrices manipulation. I reccomend you play with the variables yourself.
In a future tutorial we may look into a more robust input system.

## Feedback

I am always open for answering questions, whether through MSN (jamespraveen@aol.com), email (james@magclan.cwhnetworks.com) or through the message board attatched to this article.
If you have a problem with any of my samples / my topics in general please feel free to ask me.
Or you can post on my forums at http//www.just-code-it.net

## History

26/05/06: Posted on CodeProject

## Previous Articles

A list of licenses authors might use can be found here

## Share

Web Developer
United States
I live in England, UK in a small town which only just got broadband...

In my spare time, I run a small website design, hosting and maintenance business at www.jamesgupta.com

 First Prev Next
 Hello James Gupta. Source code for the link was broken. Please upload the Engine & Source. Cathuman28-Dec-11 20:51 Cathuman 28-Dec-11 20:51
 The Best Georgi Petrov31-Jul-06 3:58 Georgi Petrov 31-Jul-06 3:58
 Hi Friend, I try your code it is perfect. Hmmm can you provide me some help. Where to begin? I need to make some strange control 3D box containing boxes. Very strange. I nead to visualize small box, and to manipulate it rotation, colorization etc. I will need to add many many 8x8x8 boxes to make a cube that have 8 flatness levels that have 8x8 cubes gruped together. It is much like programming game tetris. I nead such a control to visualize some strange histograms that need to represent 4 dimentional data at 3D space. I will use diferent colors etc. And what is the most dificult the small cubes need to be transperant, because they will represent density if my 4th dimention. I know you heped me a lot, but will be gratefull is you can send me a link where to begin. Thanking you in advance, Georgi
 Last Visit: 31-Dec-99 19:00     Last Update: 27-May-15 21:31 Refresh 1