# Thread: Moving around in 3d space with input

1. ## Moving around in 3d space with input

HI,
I am trying to get user input from the client and move around in 3D space. I thought it would be an easy task buy doing something like this

case 'f' :
{
veiwerPos.z += 1;
} break;
case 'r':
{
veiwerPos.z -=1;
} break;
case 'g':
{
veiwerPos.x += 1;
} break;
case 'h' :
{
veiwerPos.x -= 1;
} break;

vgvec2 pos(event->mouseDeltaX, event>mouseDeltaY);
angleX += pos.x;
angleY += pos.y;
if(angleY > 45.0f)
angleY = 45.0f;
if(angleY < -45.0f)
angleY = -45.0f;
axis = pos.Normalize();
glRotatef(angleX, 0, axis, 0);
glRotatef(angleY, axis, 0, 0);
glTranslatef(veiwerPos.x, veiwerPos.y, veiwerPos.z )

I am not saying this works but it is not how I want it to work. If any one that knows what I am doing wrong or can help me out please e-mail me or respond to this post
Thanks
David Gholami

2. ## Re: Moving around in 3d space with input

you have to think of a sphere.
so, i will give you the math, you will write the code:

y = cos(angle_one_in_redians)

where angle_one is the angle starting looking down the z-axis and rotating around the y-axis, and angle_two is rotating around the x-axis.

this i called the equation for a sphere, pretty standard stuff, this gets the unit change, you can multiply x and z by any scalar to increase the step amount.

finally it will look like this

for walking forward:

player_pos_x += player_pos_x + (x*scalar)
player_pos_z += player_pos_z + (z*scalar)

walking backward just subtracts tehm.

and for turning:

cam_pos_x += cam_pos_x + (x*scalar)
cam_pos_x += cam_pos_x + (z*scalar)
cam_pos_y += cam_pos_y + (y*scalar)

3. ## Re: Moving around in 3d space with input

I'm not sure what the axis = pos.Normalize()means. Normally I would expect something like
glRotatef(angleX, 1.0f, 0.0f, 0.0f);
glRotatef(angleY, 0.0f, 1.0f, 0.0f);
for the x- and y-axis (or maybe in the other order, first yaw then pitch?)

Don't forget to start with the same matrix all the time, so add glLoadIdentity() before or glPushMatrix(); glPopMatrix() around the transformations. Otherwise the rotations and transformations will concatenate at each loop (far out...).

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•