2016-01-14 5 views
2

Я пытаюсь переместить треугольник в направлении верхней вершины.Перемещение объекта в направлении с opengl java

В зависимости от угла поворота.

Это мой код:

private static void render() { 
    // Clear the pixels on the screen and clear the contents of the depth buffer (3D contents of the scene) 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    // Reset any translations the camera made last frame update 
    glLoadIdentity(); 
    // Apply the camera position and orientation to the scene 
    //camera.applyTranslations(); 
    glTranslated(0,0,-5); 
    glPushMatrix(); 
    glRotated(f.get_direction(),0,0,1); 
    glTranslated(x,y,0); 
    f.draw(); 
    glPopMatrix(); 
    x+=(f.get_speed()/30)*cos(f.get_direction()+90); 
    y+=(f.get_speed()/30)*sin(f.get_direction()+90); 
} 

Дело в том, что независимо от того, что угол поворота, который является направление, я хочу, чтобы переместить треугольник в соответствии с ним.

+0

Пожалуйста, объясните, в чем проблема. И функция cos/sin в java принимает радианы, поэтому +90 выглядит неправильно для меня. – BDL

+0

Поменяйте порядок вращения и перевод. Поскольку последнее указанное преобразование применяется сначала, ваш текущий код сначала переводит, а затем вращается. Похоже, ты хочешь наоборот. –

ответ

0

ли вы пытаетесь перевести в соответствии с направлением вектора, но есть простая задача cos и sin аргументы в радианах glRotate в градусах:

поэтому мы должны создать статическую функцию

static double degToRad(double x) 
{ 
    return (x/180.0) * Math.PI; 
} 

чем использовать его

glLoadIdenity(); 

x += Math.cos(degToRad(getDirection() + 90)) * getSpeed(); 
y += Math.sin(degToRad(getDirection() + 90)) * getSpeed(); 

glTranslatef(x, y, 0); 

glRotatef(getDirection(), 0, 0, 1); 

drawObject(); 

Вы также можете инвертировать направление движения только подзаменяющего тока a gle от 360:

glLoadIdenity(); 

x += Math.cos(degToRad(360 - getDirection() + 90)) * getSpeed(); 
y += Math.sin(degToRad(360 - getDirection() + 90)) * getSpeed(); 

glTranslatef(x, y, 0); 

glRotatef(getDirection(), 0, 0, 1); 

drawObject(); 
+0

Да, я пробовал, но когда я называю «ничью», нарисовав треугольник, движение не в правильном направлении, оно перемещается в другую сторону. –

+0

Есть ли другой способ расчета новой позиции –

Смежные вопросы