Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 - Установка отображаемого пространства.doc
Скачиваний:
5
Добавлен:
04.12.2018
Размер:
169.47 Кб
Скачать

2. Обработка событий

Функции библиотеки GLUT реализуют так называемый событийно-управляемый механизм. Это означает, что есть некоторый внутренний цикл, который запускается после соответствующей инициализации и обрабатывает одно за другим все события, объявленные во время инициализации. К событиям относятся: щелчок мыши, закрытие окна, изменение свойств окна, передвижение курсора, нажатие клавиши, и "пустое" (idle) событие, когда ничего не происходит. Для проведения периодической проверки совершения того или иного события надо зарегистрировать функцию, которая будет его обрабатывать. Для этого используются функции вида:

void glutDisplayFunc (void (*func) (void)) – регистрируется функция перерисовки экранного окна когда оно первоначально открывается, когда оно всплыло и его содержимое может быть повреждено, когда явно вызвана функция glutPostRedisplay ( ). Для явного указания, что окно надо обновить, иногда удобно использовать функцию

void glutPostRedisplay (void).

void glutReshapeFunc (void (*func) (int width, int height)) – регистрируется функция, которая должна вызываться всякий раз, когда пользователем изменены размеры экранного окна. Функция func(width, height ) получает от ОС новые значения ширины и высоты экранного окна. Как правило func(width, height ) содержит вызов glViewport( ) с тем, чтобы порт просмотра уместить в новых размерах экранного окна и при этом по возможности сохранить пропорции рисуемого объекта.

void glutKeyboardFunc (void(*func)(unsigned int key, int x, int y)) - регистрируется функция, которая должна вызываться всякий раз, когда нажата клавиша, генерирующая символ ASCCI. Параметры key, x, y функция func() получает от ОС. Значения их следующие:

key – значение ASCCI нажатой клавиши;

x, y – координаты положения курсора «мыши» в момент, когда нажата клавиша.

void glutMouseFunc (void (*func) (int button, int state, int x, int y)) – зарегистрированная функция вызывается при «мышиных» событиях. Значения параметров она получает от ОС. Эти параметры следующие:

button – принимает значения GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON;

state - принимает значения GLUT_UP (нажатие), GLUT_DOWN (отпускание);

x, y – координаты курсора «мыши» в pix, x – число pix от левого края окна, y – число pix вниз от верха окна!

void glutIdleFunc (void (*func) (void)) - задает функцию, которая будет вызываться каждый раз, когда нет событий от пользователя.

void glutMotionFunc (void (*func)(int x, int y)) - регистрируется функция, которая должна вызываться, когда курсор «мыши» перемещается при одновременно нажатой одной или нескольких кнопках «мыши». Параметры x, y указывают местоположение курсора.

void glutPassiveMotionFunc (void (*func)(int x, int y)) - регистрируется функция, которая должна вызываться, когда курсор «мыши» перемещается и не нажато ни одной кнопки мыши. Параметры x, y указывают местоположение курсора.

3. 3D примитивы из библиотеки glut

Функции, проводящие построение примитивов из библиотеки GLUT, реализованы через стандартные примитивы OpenGL и GLU. Для построения нужного примитива достаточно произвести вызов соответствующей функции.

void glutSolidSphere (GLdouble radius, GLint slices, GLint stacks)

void glutWireSphere (GLdouble radius, GLint slices, GLint stacks)

Эти функции строят сферу с центром в начале координат и радиусом radius. При этом число разбиений сферы вокруг оси z задается параметром slices, а вдоль оси z – параметром stacks Команда glutSolidSphere() строит сферу, а glutWireSphere()–каркас сферы.

void glutSolidCube (GLdouble size)

void glutWireCube (GLdouble size)

Функции строят куб или каркас куба с центром в начале координат и длиной ребра size.

void glutSolidCone (GLdouble base, GLdouble height, GLint slices, GLint stacks)

void glutWireCone (GLdouble base, GLdouble height, GLint slices, GLint stacks)

Эти функции строят конус или его каркас высотой height и радиусом основания base, расположенный вдоль оси z. Основание находится в плоскости z=0.

void glutSolidTorus (GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings)

void glutWireTorus (GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings)

Эти функции строят тор или его каркас в плоскости z=0. Внутренний и внешний радиусы задаются параметрами innerRadius, outerRadius. Параметр nsides задает число сторон в кольцах, составляющих ортогональное сечение тора, а rings – число радиальных разбиений тора.

void glutSolidTetrahedron (void)

void glutWireTetrahedron (void)

Эти функции строят тетраэдр (правильную треугольную пирамиду) или его каркас, при этом радиус описанной сферы вокруг него равен единице.

void glutSolidOctahedron (void)

void glutWireOctahedron (void)

Эти функции строят октаэдр или его каркас, радиус описанной вокруг него сферы равен единице.

void glutSolidDodecahedron (void)

void glutWireDodecahedron (void)

Эти функции строят додекаэдр или его каркас, радиус описанной вокруг него сферы равен квадратному корню из трех.

void glutSolidIcosahedron (void)

void glutWireIcosahedron (void)

Эти функции строят икосаэдр или его каркас, радиус описанной вокруг него сферы равен единице.

void glutWireTeapot (GLdouble size)

void glutSolidTeapot (GLdouble size)

Эти функции строят чайник или его каркас.

Для корректного построения перечисленных примитивов необходимо удалять невидимые линии и поверхности, для чего надо включить соответствующий режим вызовом функции glEnable (GL_DEPTH_TEST).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]