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 - визуализация Гуро) цветов вершин. В этой программе создается меню, позволяющее выбирать из двух опций с использованием правой кнопки мыши, когда курсор мыши находится внутри окна на экране. Верхний левый угол данного всплывающего меню отображается рядом с курсором,


⇐ вернуться назад | | далее ⇒