为什么重塑代码以glMatrixMode(GL_MODELVIEW)结尾?

时间:2010-11-21 23:59:53

标签: opengl

在查看红皮书中的重塑示例时,我通常会找到类似的内容:

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)的最后一次调用会有所不同吗?

1 个答案:

答案 0 :(得分:3)

您的大部分渲染代码都会影响GL_MODELVIEW,因为它会影响对象转换和相机位置。但是,调整大小代码适用于GL_PROJECTION。程序员可能假设当前矩阵在他的大多数代码中都是模型视图,当需要影响另一个矩阵时,他/她会更改矩阵,更新矩阵,然后将目标更改回GL_MODELVIEW所以代码的其余部分没有针对错误的矩阵。

通常,OpenGL函数会影响当前目标矩阵,这就是更改矩阵的原因。