OpenGL вращает объект, удерживая его в центре экрана - PullRequest
3 голосов
/ 02 февраля 2012

Я работаю в 2D и пытаюсь вращать весь мир (включая объект) вокруг одного объекта, а также держать этот один объект в центре экрана.

Вот мой текущий код для преобразования мира, весь рендеринг выполняется потом:

hw и hh - половина ширины и высоты экрана. p - координаты объекта.

float hw = 400;
float hh = 300;

float x = hw - p.x;
float y = hh - p.y;

glTranslatef(x, y, 0);
glTranslatef(-hw, -hh, 0);
glRotatef(level->angle, 0, 0, 1);
glTranslatef(hw, hh, 0);

Однако, это не работает, как ожидалось. Любая помощь будет оценена.

1 Ответ

3 голосов
/ 04 февраля 2012

попробуйте использовать glPushMatrix () и glPopMatrix (). Итак, у вас есть:

glTranslatef(x, y, 0);
glPushMatrix();
glTranslatef(-hw, -hh, 0);
glRotatef(level->angle, 0, 0, 1);
glTranslatef(hw, hh, 0);
glPopMatrix();

glPushMatrix () сохраняет текущую матрицу (все переводит, вращает и т. Д.) И устанавливает новую матрицу. Эта матрица относительно старой Матрицы, поэтому, если вы переводите, не нажимая Матрицу, вы будете вращаться вокруг (0 | 0) Точки в этой Матрице. Если вы установили новую Матрицу, она создаст Матрицу в той позиции, в которой вы были в старой Матрице.

...