Я знаю, что glutReshapeFunc
может использоваться для реагирования на изменение размера окна, поэтому я использовал его для сброса матрицы проекции и рендеринга формы в соответствии с окном.Код выглядит следующим образом:
#include <GLUT/glut.h>
GLsizei wndWidth = 400;
GLsizei wndHeight = 300;
void init() {
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 400, 0, 300);
}
void drawSegment() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 0, 1.0);
glBegin(GL_LINE_LOOP);
glVertex2i(10, 10);
glVertex2i(wndWidth-10, wndHeight-10);
glVertex2i(wndWidth-10, 10);
glEnd();
glFlush();
}
void reshapeFunc(int width, int height) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, GLdouble(width), 0, GLdouble(height));
glClear(GL_COLOR_BUFFER_BIT);
wndWidth = width;
wndHeight = height;
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(400, 300);
glutInitWindowPosition(0, 0);
glutCreateWindow("Draw Window");
init();
glutDisplayFunc(drawSegment);
glutReshapeFunc(reshapeFunc);
glutMainLoop();
}
По моему мнению, после изменения размера окна треугольник всегда должен занимать половину окна.Но на самом деле треугольник остается своего размера после изменения размера окна, как если бы wndWidth
и wndHeight
не изменилось в drawSegment
.Так почему я получаю неправильный результат и как я могу это исправить?