2016-03-03 5 views
0

У меня есть следующий код.Где хранится выход gluLookAt?

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluLookAt(eyeX+eyePos, eyeY, eyeZ, lookatX+eyePos, lookatY, lookatZ, upX, upY, upZ); 
glGetDoublev(GL_MODELVIEW_MATRIX,lookatMatrix); 
glPushMatrix(); 

Итак, у нас есть матрица после gluLookAt, и я полагаю, что она хранится поверх текущего стека матрицы матрицы. Теперь мы получаем ценность из этого, используя GetDoulev, Тогда зачем использовать glPushMatrix в конце?

ответ

0

glPushMatrix хранит копию вокруг, так что вы можете делать дальнейшие манипуляции в стеке матриц, но в то же время можете легко вернуться к предыдущему состоянию с помощью glPopMatrix.

Но, честно говоря, не используйте его. Матричный стек был удален из современного OpenGL, и гораздо удобнее использовать реальную матричную математическую библиотеку, такую ​​как GLM, чем делать неудобные вещи с помощью стека матрицы OpenGL. В тот момент, когда вы используете glGetDoublev(GL_…_MATRIX, …), чтобы вы могли делать что-то с указанной матрицей, вы делаете что-то неправильно.

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

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