gluLookAt 的输出存储在哪里?

Where does the output of gluLookAt is stored?

我有以下代码。

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,就绝对这样做)。