OpenGL не может правильно использовать glTranslate и glRotate

Я делаю здесь небольшую игру, но есть небольшая проблема с OpenGL. Когда я перемещаю камеру и поворачиваю изображение игрока, надеясь, что оно будет выглядеть так же, за исключением текстуры с небольшим названием, все пошло не так. В приведенном ниже примере, когда я перемещаюсь вверх, камера перемещается вверх, но игрок перемещается вверх в зависимости от того, куда обращена текстура (в приведенном ниже примере текстура перемещается на 50 градусов). Что пошло не так? Как это произошло?

Страшная проблема - история OpenGL

Вот мой код:

 glTranslatef(x, y, 0.0f);
 drawMap(); //You don't see the map in the picture
 glRotatef(50.0f, 0.0f, 0.0f, 1.0f);
 drawPlayer();

Спасибо!


person Archie Mejia    schedule 08.06.2013    source источник


Ответы (1)


OpenGL использует MatrixStack для матрицы представления модели, которая преобразует объекты в пространство камеры.

Таким образом, если вы переводите без восстановления стека, перевод также будет применен к игроку, а поворот будет применен только к игроку. Если вы не хотите, чтобы трансформация применялась, сбросьте свой стек с помощью glPushMatrix(), что означает, что вы использовали glPushMatrix() раньше, иначе вы получите кучу ошибок

Я рекомендую вам сначала прочитать что-нибудь о матрице представления модели и о том, как перемещать/вращать/масштабировать объекты с помощью матрицы.

Если вы хотите восстановить матрицу, вы можете сделать что-то вроде glPushMatrix(), чтобы поместить текущее состояние в стек, и glPopMatrix(), чтобы восстановить последнее использованное состояние. Стек всегда должен быть очищен в конце, поэтому вы должны вызывать glPopMatrix() так же часто, как и glPushMatrix(), иначе вы получите ошибку.

Существует множество очень хороших руководств о линейной алгебре, лежащей в основе OpenGL, и о том, как использовать ее со встроенными методами OpenGL. [1] И здесь принятый ответ очень хорош в математике [2]

[1] http://www.opengl.org/archives/resources/faq/technical/viewing.htm [2] 3D Обработка графики - Как рассчитать матрицу представления модели

person glethien    schedule 08.06.2013