Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL-gluOrtho2d和glLoadIdentity?_C++_Opengl - Fatal编程技术网

C++ OpenGL-gluOrtho2d和glLoadIdentity?

C++ OpenGL-gluOrtho2d和glLoadIdentity?,c++,opengl,C++,Opengl,我开始使用OpenGL。我不确定gluOrtho2d和glLoadIdentity如何一起发挥作用。特别是,我有下面的代码,它应该在10x10显示器的中心画一个2x2的正方形 int main() { glutCreateWindow("Draw A Square"); glutDisplayFunc(mydisplay); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-5.0, 5

我开始使用OpenGL。我不确定
gluOrtho2d
glLoadIdentity
如何一起发挥作用。特别是,我有下面的代码,它应该在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()
中,正方形将填充整个视口。这里发生了什么?

您忘记将矩阵模式切换回
GL\u MODELVIEW


只需添加
glMatrixMode(GL_MODELVIEW)
gluOrtho2D(-5.0,5.0,-5.0,5.0)

强制注释-您使用的是即时模式,该模式已被弃用很长时间。一开始可能会更容易一些,但最终你必须扔掉它,开始学习现代OpenGL,所以你最好现在就开始学习。