Похоже, вам нужно преобразовать полярные координаты (перемещаясь с использованием угла и радиуса) в декартовы (перемещаясь с использованием x и y).
Формула выглядит примерно так:
x = cos(angle) * radius;
y = sin(angle) * radius;
Итак, как упоминает @Lie Ryan, вам также нужно умножаться со скоростью (которая является вашим радиусом в полярных координатах).
Либо укажите свой угол в градусах, но используйте радианы () при использовании cos, sin при работе с радианами, либо используйте радианы и используйте градусов () с glRotatef , до вас
Кроме того, вы можете взглянуть на glPushMatrix () и glPopMatrix (). По сути, они позволяют вам вкладывать преобразования. Какие бы преобразования вы ни делали с блоками, они влияют только на этот блок локально.
Вот что я имею в виду, используйте клавиши w, a, s, d:
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();
}
На самом деле вам не нужны {} для вызовов матрицы push и pop, я добавил их как наглядное пособие. Кроме того, вы можете сделать это без push / pop, объединяя ваши преобразования, но удобно знать, что они есть, когда они вам нужны. Может пригодиться, если вы хотите выстрелить несколько GL_LINES из этого треугольника ... пиу пиу пиу!
НТН