
- •Глава 1. Основы OpenGl 8
- •Введение
- •ОсновыOpenGl
- •Основные возможности
- •ИнтерфейсOpenGl
- •АрхитектураOpenGl
- •Синтаксис команд
- •Пример приложения
- •Контрольные вопросы:
- •Рисование геометрических объектов
- •Процесс обновления изображения
- •Вершины и примитивы
- •Положение вершины в пространстве
- •Цвет вершины
- •Нормаль
- •Операторные скобкиglBegin/glEnd
- •Дисплейные списки
- •Массивы вершин
- •Контрольные вопросы
- •Преобразования объектов
- •Работа с матрицами
- •Модельно-Видовые преобразования
- •Проекции
- •Область вывода
- •Контрольные вопросы
- •Материалы и освещение
- •Модель освещения
- •Спецификация материалов
- •Описание источников света
- •Создание эффекта тумана
- •Контрольные вопросы
- •Текстурирование
- •Подготовка текстуры
- •Наложение текстуры на объекты
- •Текстурные координаты
- •Контрольные вопросы
- •Операции с пикселями
- •Смешивание изображений. Прозрачность
- •Буфер-накопитель
- •Буфер маски
- •Управление растеризацией
- •Приемы работы сOpenGl
- •Устранение ступенчатости
- •Построение теней
- •Зеркальные отражения
- •Оптимизация программ
- •Организация приложения
- •Высокоуровневая оптимизация
- •Низкоуровневая оптимизация
- •Оптимизация вызовов OpenGl
- •Передача данных в OpenGl
- •Преобразования
- •Растеризация
- •Текстурирование
- •Очистка буферов
- •СтруктураGlut-приложения
- •Примитивы библиотекGlUиGlut
- •Настройка приложенийOpenGl
- •Демонстрационные программы
- •Пример 1: Простое glut-приложение
- •Пример 2: Модель освещения OpenGl
- •Пример 3: Текстурирование
- •Примеры практических заданий
- •Виртуальные часы
- •Интерактивный ландшафт
- •Литература
- •Предметный указатель
Контрольные вопросы:
В чем, по вашему мнению, заключается необходимость создания стандартной графической библиотеки?
Кратко опишите архитектуру библиотек OpenGLи организацию конвейера.
Назовите категории команд (функций) библиотеки.
Зачем нужны различные варианты команд OpenGL, отличающиеся только типами параметров?
Почему организацию OpenGLчасто сравнивают с конечным автоматом?
Рисование геометрических объектов
Процесс обновления изображения
Как правило, задачей программы, использующей OpenGL, является обработка трехмерной сцены и интерактивное отображение в буфере кадра. Сцена состоит из набора трехмерных объектов, источников света и виртуальной камеры, определяющей текущее положение наблюдателя.
Обычно приложение OpenGL в бесконечном цикле вызывает функцию обновления изображения в окне. В этой функции и сосредоточены вызовы основных команд OpenGL. Если используется библиотека GLUT, то это будет функция с обратным вызовом, зарегистрированная с помощью вызоваglutDisplayFunc(). GLUT вызывает эту функцию, когда операционная система информирует приложение о том, что содержимое окна необходимо перерисовать (например, если окно было перекрыто другим). Создаваемое изображение может быть как статичным, так и анимированным, т.е. зависеть от каких-либо параметров, изменяющихся со временем. В этом случае лучше вызывать функцию обновления самостоятельно. Например, с помощью командыglutPostRedisplay(). За более подробной информацией можно обратиться к приложению A.
Приступим, наконец, к тому, чем занимается типичная функция обновления изображения. Как правило, она состоит из трех шагов:
очистка буферов OpenGL;
установка положения наблюдателя;
преобразование и рисование геометрических объектов.
Очистка буферов производится с помощью команды:
void glClearColor ( clampf r, clampf g, clampf b, clampf a )
void glClear(bitfield buf)
Команда glClearColorустанавливает цвет, которым будет заполнен буфер кадра. Первые три параметра команды задаютR,GиBкомпоненты цвета и должны принадлежать отрезку [0,1]. Четвертый параметр задает так называемую альфа компоненту (см. п. 6.1). Как правило, он равен 1. По умолчанию цвет – черный (0,0,0,1).
Команда glClearочищает буферы, а параметрbufопределяет комбинацию констант, соответствующую буферам, которые нужно очистить (см. главу 6). Типичная программа вызывает команду
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
для очистки буферов цвета и глубины.
Установка положения наблюдателя и преобразования трехмерных объектов (поворот, сдвиг и т.д.) контролируются с помощью задания матриц преобразования. Преобразования объектов и настройка положения виртуальной камеры описаны в главе 3.
Сейчас сосредоточимся на том, как передать в OpenGLописания объектов, находящихся в сцене. Каждый объект является набором примитивовOpenGL.
Вершины и примитивы
Вершинаявляется атомарным графическим примитивомOpenGLи определяет точку, конец отрезка, угол многоугольника и т.д. Все остальные примитивы формируются с помощью задания вершин, входящих в данный примитив. Например, отрезок определяется двумя вершинами, являющимися концами отрезка.
С каждой вершиной ассоциируются ее атрибуты. В число основных атрибутов входят положение вершины в пространстве, цвет вершины и вектор нормали.