opengl - 为什么 reshape 代码以 glMatrixMode(GL_MODELVIEW) 结尾?

标签 opengl

在查看红皮书中的 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/

相关文章:

python - 使用 PyOpenGL 从索引缓冲区渲染框出现问题

java - LWJGL:变色的纹理

c++ - 我的 OpenGL C++ Eclipse 项目突然停止识别 glMatrixMode(GL_MODELVIEW)

opengl - 即使使用LoadLibrary和GetProcAddress,ChoosePixelFormat也会崩溃

c++ - 如何在 SDL 中绘制多边形?

delphi - 从调用重写过程的公共(public)类类型继承的对象列表?

linux - 为什么有些部分没有在更大的窗口上呈现?

c++ - 如何将动态大小的纹理数组与 glTexImage2D 一起使用?

纯 C 中的 Cocoa OpenGL 窗口?

java - libGDX 着色器坐标和相机位置