Страница 12

Введение в OpenGl. Учебник

Главная
Страница 1
Страница 2
Страница 3
Страница 4
Страница 5
Страница 6
Страница 7
Страница 8
Страница 9
Страница 10
Страница 11
Страница 12
Страница 13
Страница 14
Страница 15
Страница 16
Страница 17
Страница 18
Страница 19
Страница 20
Страница 21






Скачать учебник
Предыдущая страница
Следующая страница
и GLUT для вашей системы, все примеры будут работать без изменений (или почти без изменений).

Кроме того, в отличие от OpenGL, чьи команды ограничены рисованием примитивов, GLUT содержит функции для рисования более сложных трехмерных объектов, таких как сфера, куб, торус (бублик) и чайник. (Обратите внимание на то, что GLU также содержит функции для рисования этих объектов, а также цилиндров, конусов и многого другого.)

Библиотеки GLUT может быть недостаточно для построения полномасштабного OpenGL приложения (например, в силу отсутствия полного контроля над форматом пикселей или созданием контекста OpenGL), но это хорошая начальная точка для изучения OpenGL. Остальная часть данного раздела посвящена наиболее часто применяемым группам функций GLUT. Функции неуказанные здесь, рассмотрены в приложении A данного пособия.

1.9.1 Управление окном

void glutInit (int argc, char **argv);

glutInit() должна быть вызвана до любых других GLUT – функций, так как она инициализирует саму библиотеку GLUT. glutInit() также обрабатывает параметры командной строки, но сами параметры зависят от конкретной оконной системы. Для системы X Window, примерами могут быть –iconic, -geometry и –display. (Параметры, передаваемые glutInit(), должны быть теми же самыми, что и параметры, передаваемые в функцию main()).

void glutInitDisplayMode (unsigned int mode);

Указывает режим отображения (например, RGBA или индексный, одинарной или двойной буферизации) для окон, создаваемых вызовами glutCreateWindow(). Вы также можете указывать, имеет ли окно ассоциированные с ним буфер или буферы глубины, трафарета и аккумуляции. Аргумент mask – это битовая комбинация, полученная при помощи операции OR и следующих констант: GLUT_RGBA или GLUT_INDEX (для указания цветового режима), GLUT_SINGLE или GLUT_DOUBLE (для указания режима буферизации), а также константы для включения различных буферов GLUT_DEPTH, GLUT_STENCIL, GLUT_ACCUN. Например, для окна с двойной буферизаций, RGBA – цветовым режимом и ассоциированными буферами глубины и трафарета, используйте GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL. Значение по умолчанию – GLUT_RGBA | GLUT_ SINGLE (окно с однократной буферизацией в RGBA - режиме).

void glutInitWindowSize (int width, int height);
void glutInitWindowPosition (int x, int y);

Запрашивают окно определенного размера и в определенном месте экрана соответственно. Аргументы (x, y) определяют, где будет находиться угол окна относительно всего экрана. width и height определяют размер окна (в пикселях). Начальные размеры и место размещения окна могут быть перекрыты последующими вызовами.

int glutCreateWindow (char *name);

Открывает окно с предварительно установленными характеристиками (режимом отображения, размером и так далее). Строка name может быть отображена в заголовке окна, но это зависит от конкретной оконной системы. Окно не отображается до того, как произведен вход в glutMainLoop(), поэтому до вызова этой функции нельзя рисовать что-либо в окно.
Возвращаемая целая величина представляет собой уникальный идентификатор окна. Этот идентификатор может быть использован для управления несколькими окнами в одном приложении (каждое со своим контекстом OpenGL) и рисования в них.

1.9.2 Функции управления событиями

После того, как окно создано, но до входа в главный цикл программы, вы должны зарегистрировать функции обратного вызова, используя следующие функции GLUT.

void glutDisplayFunc (void (*func)(void));

Позволяет указать функцию (аргументом func), которая будет вызываться каждый раз, когда содержимое окна требует перерисовки. Это может случиться, когда окно открывается, разворачивается, освобождается его часть, ранее перекрытая другим окном, или вызывается функция glutPostRedisplay().

void glutReshapeFunc (void (*func)(int width, int height));

Позволяет указать функцию, которая вызывается каждый раз при изменении размера окна или его позиции на экране. Аргумент func – это указатель на функцию, которая принимает два параметра: width – новая ширина окна и heightновая высота окна. Обычно func вызывает glViewport() для отсечения графического вывода по новым размерам окна, а также настраивает проекционную матрицу для сохранения пропорций спроецированного изображения в соответствии с новыми размерами порта просмотра. Если glutReshapeFunc

Предыдущая страница
Следующая страница
Hosted by uCoz