c++ - OpenGL - gluOrtho2d 和 glLoadIdentity?

标签 c++ opengl

我开始使用 OpenGL。我不确定 gluOrtho2dglLoadIdentity 如何一起发挥作用。特别是,我有以下代码,它应该在 10x10 显示的中心绘制一个 2x2 的正方形。

int main() {
    glutCreateWindow("Draw A Square");
    glutDisplayFunc(mydisplay);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-5.0, 5.0, -5.0, 5.0);

    glutMainLoop();
}

void mydisplay() {
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    drawAUnitSquare();

    glFlush();
}

void drawAUnitSquare() {
    // glLoadIdentity();
    glBegin(GL_POLYGON);
        glColor3f(1.0, 0.0, 0.0);
        glVertex2f(-1, -1);
        glVertex2f(1, -1);
        glVertex2f(1, 1);
        glVertex2f(-1, 1);
    glEnd();
}

上面的代码有效。但是,如果我取消注释 drawAUnitSquare() 中的 glLoadIdentity();,则该正方形会填满整个视口(viewport)。这里发生了什么?

最佳答案

您忘记将矩阵模式切换回 GL_MODELVIEW

只需在 gluOrtho2D(-5.0, 5.0, -5.0, 5.0); 之后添加 glMatrixMode(GL_MODELVIEW);;

关于c++ - OpenGL - gluOrtho2d 和 glLoadIdentity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28206262/

相关文章:

c++ - 二进制打开和复制图像文件 C++

c++ - 混合 std::cout 的奇怪输出

c++ - 如何将十六进制字解析为填充位数组

c++ - 为什么从中心原点旋转

opengl - 阴影贴图着色器

c++ - IPV6链路本地多播

OSX10.8 上的 C++ Hello World 问题

c++ - OpenGL/GLM - 计算截头体问题

java - 在模型上重复纹理

opengl - 为什么有一个单独的投影矩阵是有益的,但结合模型和 View 矩阵?