Es sieht so aus, als müssten Sie von Polarkoordinaten (die sich unter Verwendung eines Winkels und eines Radius bewegen) in kartesische Koordinaten umwandeln (die sich mit x und y bewegen).
Die Formel sieht ein bisschen wie folgt aus:
x = cos(angle) * radius;
y = sin(angle) * radius;
So, wie @Lie Ryan erwähnt, können Sie auch mit Geschwindigkeit multiplizieren müssen (die in Polarkoordinaten Ihr Radius ist).
Entweder haben Sie Ihre Winkel in Grad, aber verwenden Radian() wenn cos verwenden, sin wie sie mit Radiant arbeiten, oder verwenden Sie Radiant und Grad() mit glRotatef, verwenden Sie bis zu Ihnen
Sie können sich auch glPushMatrix() und glPopMatrix() ansehen. Im Grunde erlauben sie es, Transformationen zu verschachteln. Welche Transformationen Sie auch immer mit den Blöcken durchführen, sie wirken sich nur lokal auf diesen Block aus.
Hier ist, was ich meine, W, A, S, D Tasten:
import processing.opengl.*;
import javax.media.opengl.*;
float direction = 0;//angle in degrees
float speed = 0;//radius
float xPos,yPos;
void setup() {
size(600, 500, OPENGL);
}
void keyPressed(){
if(key == 'w') speed += 1;
if(key == 'a') direction -= 10;
if(key == 'd') direction += 10;
if(key == 's') speed -= 1;
if(speed > 10) speed = 10;
if(speed < 0) speed = 0;
println("direction: " + direction + " speed: " + speed);
}
void draw() {
//update
xPos += cos(radians(direction)) * speed;
yPos += sin(radians(direction)) * speed;
//draw
background(255);
PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;
GL gl = pgl.beginGL();
gl.glTranslatef(width * .5,height * .5,0);//start from center, not top left
gl.glPushMatrix();
{//enter local/relative
gl.glTranslatef(xPos,yPos,0);
gl.glRotatef(direction-90,0,0,1);
gl.glColor3f(.75, 0, 0);
gl.glBegin(GL.GL_TRIANGLES);
gl.glVertex2i(0, 10);
gl.glVertex2i(-10, -10);
gl.glVertex2i(10, -10);
gl.glEnd();
}//exit local, back to global/absolute coords
gl.glPopMatrix();
pgl.endGL();
}
Sie eigentlich nicht die {} für die Push- und Pop-Matrix Anrufe müssen, ich sie wie eine Sehhilfe hinzugefügt . Sie können dies auch ohne Push/Pop tun, indem Sie Ihre Transformationen verketten, aber es ist praktisch zu wissen, dass diese für Sie da sind, wenn Sie sie brauchen. Könnte sich als nützlich erweisen, wenn Sie einige GL_LINES aus diesem Dreieck schießen wollen ... Kirchenbank!
HTH
Ich bin nicht sicher, ob ich das richtig verstehen, aber Sie wollen Ihr Dreieck in Richtung eine Richtung (x, y) und drehen in Richtung zu übersetzen, nicht wahr? –