OpenGL - gluOrtho2d和glLoadIdentity?

时间:2015-01-29 02:55:30

标签: 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();
}

以上代码有效。但是,如果我取消注释glLoadIdentity();中的drawAUnitSquare(),则广场会填充整个视口。这里发生了什么?

1 个答案:

答案 0 :(得分:1)

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

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