OpenGL - gluOrtho2d 和 glLoadIdentity?
OpenGL - gluOrtho2d and glLoadIdentity?
我开始使用 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();
}
以上代码有效。但是,如果我取消注释 drawAUnitSquare()
中的 glLoadIdentity();
,则该正方形会填满整个视口。这里发生了什么?
您忘记将矩阵模式切换回 GL_MODELVIEW
。
只需在 gluOrtho2D(-5.0, 5.0, -5.0, 5.0);
之后添加 glMatrixMode(GL_MODELVIEW);
。
我开始使用 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();
}
以上代码有效。但是,如果我取消注释 drawAUnitSquare()
中的 glLoadIdentity();
,则该正方形会填满整个视口。这里发生了什么?
您忘记将矩阵模式切换回 GL_MODELVIEW
。
只需在 gluOrtho2D(-5.0, 5.0, -5.0, 5.0);
之后添加 glMatrixMode(GL_MODELVIEW);
。