Moving a triangle regardless of direction

I am trying to move a 2D triangle around the screen. The problem that I have is that the tip of the triangle (vertex facing Top of the monitor) is to be forward facing, (like the grill of a car goes where the car is pointed) and the triangle when the up arrow is pressed will move in that direction.

How do I get it to move in that direction, currently it moves along the X axis no matter what the rotation is.

Any hints?

Thanks!

Harnak

What order are your rotation and translation in? It sounds like you may need to swap them…

Chris

I translate then rotate.

My real problem (seems to be atleast) is how to determine how far to move the triangle when it’s at a 45 degree angle.

Harnak

To move anything n units at a x° angle, move it cos(x)*n in x-direction and sin(x)*n in y-direction. (you might want to include math.h).
Second, translating before rotating seems to make not much sense. I’s suggest something like the following, called from your display function:

GLfloat angle = 0.0;

void moveArrow ( GLfloat stepwidth, GLfloat angle )
{
glPushMatrix ( ); // to move it independantly from the rest of the scene
glRotatef ( oldangle + angle, 0.0, 0.0, 1.0 ); // if angle = 0 it will just move forward
glTranslatef ( 0.0, stepwidth, 0.0 ); // if stepwidth = 0 it will just spin, if not it will move in y-direction (upwards, relatively)
glBegin ( GL_TRIANGLE );
  // colors, vertices...
glEnd ( );
glPopMatrix ( ); // go back to the rest of the scene
}

This way you don’t need to do any math. It’s just like the car, first use the steering wheel and then the accelerator, not lift it around a bend and pose it in the correct direction afterwards

Damn typos in here…

[This message has been edited by Hermann (edited 02-07-2001).]

Those car examples are working wonders! =)

Thanks for the hint. I know exactly what’s wrong now!

thanks!