C++ OpenGL-gluOrtho2d和glLoadIdentity?
我开始使用OpenGL。我不确定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
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,所以你最好现在就开始学习。