if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN) drawSquare(x,y); if(btn==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN) exit();
}
Поскольку графические примитивы формируются только в функции drawSquare(), значения атрибутов можно устанавливать в любом месте программы. Мы для этого будем использовать функцию myinit().
Нам потребуются три глобальные переменные. Размеры окна могут изменяться в процессе работы программы, а потому текущие значения соответствующих параметров должны быть доступны всем компонентам программы. В частности, они понадобятся функции перерисовки и функции вычерчивания квадратиков drawSquare (). Если бы нужно было вычерчивать квадратики переменного размера, то соответствующий параметр также следовало бы сделать глобально доступным. Программа инициализации устанавливает размеры отсекающего прямоугольника равными размерам окна приложения, которое будет сформировано в main(), а размеры видового окна задает таким образом, чтобы оно занимало всю область окна приложения. Цвет фона окна- черный. Обращаю ваше внимание на то, что установку параметров окна приложения и видового окна в данном случае можно и не включать в программу, поскольку мы фактически дублируем установки по умолчанию. Но я специально включаю в программу соответствующие операторы, чтобы потом можно было сравнить этот вариант программы с тем, который будет создан в следующем разделе.
/* Глобальные переменные */
GLsizei wh = 500, ww = 500; /* Исходные размеры окна */ GLfloat size =3.0; /* Половина длины стороны квадратика */
void myinit(void) {
/* Установка параметров визуализации */
glviewport(0,0,ww,wh); glMatrixMode(GL_PROJECTION); glLoadIdentity();
gluOrtho2D(0.0, (GLdouble)ww, 0.0, (GLdouble)wh);
3.5. Программирование ввода, управляемого событиями
glMatrixMode(GL_MODELVIEW);
/* Очистить окно, цвет фона - черный */
glClearColor (0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glFlush();
}
При разработке программы вычерчивания квадратиков нужно учитывать, что те координаты положения маркера мыши, которые передаются операционной системой при возбуждении события мыши, определены в системе координат окна приложения, начало которой находится в его верхнем левом углу. Следовательно, придется сначала скорректировать значение координаты у, используя для этого текущее значение высоты окна (глобальную переменную wh). Для вычерчивания будем использовать случайно выбранный цвет, воспользовавшись для этого стандартным генератором случайных чисел - функцией rand().