Итак, я искал это из wazoo и просматривал всевозможные ресурсы - тексты, лекции и т. Д. - но я либо что-то пропустил, либо просто не понял его правильно. Для класса в OpenGL нам нужно разработать игру с астероидами, которая кажется простой концепцией, но мне очень трудно получить движение моего корабля прямо. Я знаю, что нам нужно перевести наш корабль в начало, выполнить поворот и перевести его обратно в соответствующее положение - проблема, с которой я столкнулась, - это понимание ее выполнения. Код у меня есть для рисования корабля это до сих пор:OpenGL - Вращение двумерного астероида
void
drawShip(Ship *s)
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
myTranslate2D(s->x, s->y);
float x = s->x, y = s->y;
myRotate2D(s->phi);
glBegin(GL_LINE_LOOP);
glVertex2f(s->x + s->dx, s->y + s->dy + 3);
glVertex2f(s->x + s->dx-2, s->y + s->dy - 3);
glVertex2f(s->x + s->dx, s->y + s->dy -1.5);
glVertex2f(s->x + s->dx + 2, s->y + s->dy - 3);
glEnd();
myTranslate2D(s->x - x, s->y - y);
glPopMatrix();
}
При вращении и движении определяется следующим переменными, которые правильно измененными в функции клавиатуры:
if (left == 1)
{
ship.phi -= 0.3;
}
if (right == 1)
{
ship.phi += 0.3;
}
if (up == 1)
{
ship.dx += -2.0*sin(ship.phi);
ship.dy += 2.0*cos(ship.phi);
}
if (down == 1)
{
ship.dx += 2.0*sin(ship.phi);
ship.dy += -2.0*cos(ship.phi);
}
drawShip(&ship);
После того, как я получаю вращение вниз, я уверен, что я смогу выполнить все остальное. Как бы то ни было, приведенный выше код позволит моему объекту либо вращаться в начале, либо вокруг него, но он не будет вращаться на месте, если он не находится непосредственно в начале координат. Само судно было инициализировано точками (0,0), (25, 25) и (50, 50), и для моих целей происхождение экрана (0,0) является нижним левым углом.
Может кто-нибудь помочь мне понять, почему мой корабль не будет вращаться на месте, и только о происхождении? Я ожидаю, что это имеет какое-то отношение к тому, как я выполняю свои переводы и ротацию, но я не понимаю, что.
Похож на C. Не добавляйте тег C++ для вопросов C, это разные языки! – Olaf