在查看红皮书中的重塑示例时,我通常会找到类似的内容:
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)
。
在这个特定的例子中,glFrustum
会影响投影矩阵,对吗?为什么GL_MODELVIEW
稍后会被调用?如果省略对glMatrixMode(GL_MODELVIEW)
的最后一次调用会有所不同吗?
答案 0 :(得分:3)
您的大部分渲染代码都会影响GL_MODELVIEW
,因为它会影响对象转换和相机位置。但是,调整大小代码适用于GL_PROJECTION
。程序员可能假设当前矩阵在他的大多数代码中都是模型视图,当需要影响另一个矩阵时,他/她会更改矩阵,更新矩阵,然后将目标更改回GL_MODELVIEW
所以代码的其余部分没有针对错误的矩阵。
通常,OpenGL函数会影响当前目标矩阵,这就是更改矩阵的原因。