我有以下代码。
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 :(得分:0)
glPushMatrix保留一个副本,以便您可以对矩阵堆栈进行进一步的操作,但是可以使用glPopMatrix轻松恢复到以前的状态。
但要说实话,不要使用它。矩阵堆栈已从现代OpenGL中删除,使用真正的矩阵数学库(如GLM)比使用OpenGL矩阵堆栈做尴尬的事情要方便得多。当你使用glGetDoublev(GL_…_MATRIX, …)
以便你可以用所述矩阵做更多事情时,你就做错了。
只需使用一个真正的矩阵数学库,并使用glLoadMatrix加载您需要的任何矩阵(如果您必须使用旧式固定功能管道)或将其加载到着色器制服(这是您应该绝对做的)无论什么时候你都可以使用现代的OpenGL)。