Я пытаюсь повернуть объект (стрелку), который имеет положение по умолчанию, указывающее вправо. Я искал вокруг, и я использую glLoadIdentity () и glPushMatrix () и glPopMatrix () как способ только вращать объект в моей функции glBegin, а не всю сцену:
glLoadIdentity();
glPushMatrix();
glRotatef(5, 0.0f, 0.0f, 1.0f);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex2f(xx2-0.01, yy2);
glVertex2f(xx2-0.06, yy2+0.03);
glVertex2f(xx2-0.06, yy2-0.03);
glEnd();
glPopMatrix();
Тем не менее, он также переводит мою стрелку, а не только вращает ее. Нужно ли переводить смещение обратно в исходное положение? Или я что-то не так делаю?
РЕШИТЬ:
glLoadIdentity();
glPushMatrix();
glTranslatef(xx2, yy2, 0);
glRotatef(45, 0.0f, 0.0f, 1.0f);
glTranslatef(-xx2, -yy2, 0);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex2f(xx2-0.01, yy2);
glVertex2f(xx2-0.06, yy2+0.03);
glVertex2f(xx2-0.06, yy2-0.03);
glEnd();
glPopMatrix();
Необходимо перевести обратно в центр (0, 0, 0), применить вращение, а затем вернуться в исходное положение (xx2, yy2, 0)
Все повороты вокруг происхождения.
Так что да, если вы хотите повернуть вокруг какой-то другой точки, вы должны перевести из этой точки в начало координат, повернуть, а затем снова перевести обратно.
Ваш код верен, но вы применяете свои операции не по порядку. В частности, вам нужно сначала применить вращение, а затем применить перевод.