2012-02-01 4 views
3

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

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

аппаратные и чч являются половиной ширины и высоты экрана. 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); 

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

+0

Если вы хотите повернуть только часть своей сцены, нажмите на матричный стек, отрисуйте эту часть и поместите стек? Возможно, вы захотите показать код реального кода. – pmr

+0

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

ответ

3

попробуйте использовать 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) точки в этой матрице. Если вы создадите новую матрицу, она создаст эту матрицу в том месте, где вы были в старой матрице.

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