gluLookAt的输出存储在哪里?

问题描述:

我有以下代码。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?

glPushMatrix保留一个副本,以便您可以对矩阵堆栈进行进一步操作,但可以使用glPopMatrix轻松恢复到以前的状态。

但事实告诉,不要使用它。矩阵堆栈已经从现代OpenGL中移除,使用像GLM这样的真正矩阵数学库比使用OpenGL矩阵堆栈尴尬多了。在您使用glGetDoublev(GL_…_MATRIX, …)的那一刻,以便您可以使用所述矩阵做更多的事情,那么您做错了什么。

只需使用一个真正的矩阵数学库,并使用glLoadMatrix(如果您绝对必须使用旧式固定功能管线)或将其加载到着色器统一中(这是您绝对应该使用的)只要你可以使用现代的OpenGL)。