在查看红皮书中的 reshape 示例时,我通常会发现类似以下内容:
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
glMatrixMode(GL_MODELVIEW);
}
我知道调用 glMatrixMode(GL_PROJECTION);
后跟 glLoadIdentity();
会重置投影矩阵,但我不明白为什么 glMatrixMode(GL_MODELVIEW)
通常在 reshape 结束时调用。
在此特定示例中,glFrustum
会影响投影矩阵,对吗?为什么稍后调用GL_MODELVIEW
?如果省略最后一次调用 glMatrixMode(GL_MODELVIEW)
会有什么不同吗?
最佳答案
您的大部分渲染代码都会影响 GL_MODELVIEW
,因为它会影响对象平移和相机位置。但是,调整大小代码适用于 GL_PROJECTION
。程序员可能假设当前矩阵是他大部分代码中的模型 View 矩阵,当需要影响另一个矩阵时,他/她会更改矩阵,更新它,然后将目标更改回 GL_MODELVIEW
因此其余代码不会针对错误的矩阵。
一般来说,OpenGL 函数会影响当前目标的任何矩阵,这就是您更改矩阵的原因。
关于opengl - 为什么 reshape 代码以 glMatrixMode(GL_MODELVIEW) 结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4241166/