glRotatef не вращается, как ожидалось - PullRequest
0 голосов
/ 14 ноября 2011

Я пытаюсь повернуть четырехугольник вокруг его центра, но когда я запускаю приложение, четырехугольник поворачивается вокруг положения экрана на 0,0, я не могу понять почему, так как все выглядит хорошо для меня.Любая помощь будет принята с благодарностью.

glPushMatrix();
glTranslatef(pxob->x, pxob->y, 0);

glRotatef(pxob->theta,0.0f,0.0f,1.0f);

glBegin(GL_QUADS);
    glColor3f((28.0f / 255.0f), (28.0f / 255.0f), (28.0f / 255.0f)); 

    glVertex3f(pxob->x - (SIZE / 2), pxob->y- (SIZE / 2), 0);
    glVertex3f(pxob->x + (SIZE / 2), pxob->y- (SIZE / 2), 0);
    glVertex3f(pxob->x + (SIZE / 2), pxob->y + (SIZE / 2), 0);
    glVertex3f(pxob->x- (SIZE / 2), pxob->y + (SIZE / 2), 0);
glEnd();
glPopMatrix();

РЕДАКТИРОВАТЬ: Спасибо, Кром, за вашу помощь и руководство меня через нее.Мне нужно было позвонить glTranslatef до glRotatef, хотя он хотел все еще вращаться вокруг позиции 0,0.Еще раз спасибо!

1 Ответ

3 голосов
/ 14 ноября 2011

Сначала нужно glRotatef, затем glTranslatef.

. Это потому, что сначала необходимо умножить первый объект на матрицу вращения (повернуть объект вокруг его центра), а затем применить матрицу перевода (перемещениеповернутый объект в нужное положение).

Если вы сделаете это наоборот, переведенный объект будет вращаться вокруг 0; 0 координат.

РЕДАКТИРОВАТЬ: Глядя на свой код - вы строитеquad со смещением X / Y, тогда как вы уже применили его к glTranslatef.Это, вероятно, ошибка.Код должен быть:

glVertex3f(-SIZE / 2, -SIZE / 2, 0);
glVertex3f( SIZE / 2, -SIZE / 2, 0);
glVertex3f( SIZE / 2,  SIZE / 2, 0);
glVertex3f(-SIZE / 2,  SIZE / 2, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...