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)。