glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadldentity ( );
gluOrtho2D (0.0, 300.0, 0.0, 300.0);
glMatrixMode (GL_MODELVIEW);
/* Обновить параметры размера окна. */ winWidth = newWidth; winHeight = newHeight;
}
void main (^nt argc, char** argv)
{
glutlnit (&argc, argv);
glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutlnitWindowPosition (100, 100); glutlnitWindowSize (winWidth, winHeight); glutCreateWindow ("Пример программы выбора");
init ( );
glutDisplayFunc (displayFcn); glutReshapeFunc (winReshapeFen); glutMouseFunc (pickRects);
glutMainLoop ( );
> Выход процедуры pickrects
Число выбранных объектов = 2 Положение в стеке = 1
Минимальная глубина = 0, максимальная глубина = 0 Идентификаторы в стеке: Положение в стеке * 3
Минимальная глубина = 0, максимальная глубина = 0 Идентификаторы в стеке:
30 10 20
ФУНКЦИИ МЕНЮ OpenGL
В дополнение к процедурам работы с устройствами ввода GLUT содержит функции для добавления в программы простых всплывающих меню. С помощью этих функций можно настроить различные меню и связанные с ними подменю и обращаться к ним. Команды меню GLUT располагаются в процедуре main вместе с другими функциями GLUT.
СОЗДАНИЕ МЕНЮ GLUT
Всплывающее меню создается с помощью оператора
glutCreateMenu (menuFcn); Здесь параметр menuFcn представляет имя процедуры, вызываемой при выборе позиции меню. Данная процедура имеет один аргумент - целое значение, соответствующее положению выбранной опции.
void menuFcn (GLint menuItemNumber)
Целое значение, переданное параметру menuItemNumber, затем используется функцией menuFcn для выполнения некоторого действия. Когда меню создается, оно соотносится с текущим окном на экране дисплея.
Обозначив функции меню, которые будут вызваться при выборе позиции меню, нужно задать опции, которые будут перечислены в меню. Для этого используется ряд операторов, в которых указывается имя и положение каждой опции. Эти операторы имеют общую форму
glutAddMenuEntry (charString, menuItemNumber); Параметр charString задает текст, который будет отображаться в меню, а параметр menuItemNumber дает положение этой позиции в меню. Например, приведенные ниже операторы создают меню с двумя опциями.
glutCreateMenu (menuFcn);
glutAddMenuEntry ("Первый пункт меню", 1); glutAddMenuEntry ("Второй пункт меню", 2); Далее нужно задать кнопку мыши, которая будет использоваться для выбора опции меню. Для этого используется команда
glutAttachMenu (button); Здесь параметру button присваивается одна из трех символьных констант GLUT, соотнесенная с левой, средней или правой кнопкой мыши.
Создание и использование меню GLUT иллюстрируется на приведенной ниже программе, в которой есть две опции отображения внутреннего заполнения треугольника. Изначально треугольник определяется двумя вершинами и одной красной вершиной, а цвет заполнения определяется интерполяцией цветов вершин. Функции glShadeModel (разделы 4.14 и 10.20) используются для выбора заполнения треугольника, т.е. того, как треугольник будет закрашен многоугольниками, - сплошной цвет или интерполяция (Gouraud rendering - визуализация Гуро) цветов вершин. В этой программе создается меню, позволяющее выбирать из двух опций с использованием правой кнопки мыши, когда курсор мыши находится внутри окна на экране. Верхний левый угол данного всплывающего меню отображается рядом с курсором,