Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366), страница 2
Текст из файла (страница 2)
Книга состоит из трех частей и двух приложений. Первая часть посвящена непосредственно описанию работы с библиотекой, основным командам и переменным. Во второй части рассматриваются принципы реализации более сложных алгоритмов компьютерной графики с помощью средств OpenGL. В третьей части приводится описание настройки работы с OpenGL в различных интегрированных средах программирования и создание приложений, применяющих OpenGL для синтеза изображений. В приложениях можно найти демонстрационные программы на OpenGL и примеры практических заданий для самоконтроля.
В пособии рассматривается стандарт OpenGL 1.2.
Часть I
Основы OpenGL
Глава 1.
Графический процесс и OpenGL
Прежде чем перейти к описанию функций OpenGL, необходимо понять ее место в процессе формирования изображения на экране, определить область, задачи которой можно решать с помощью библиотеки.
1.1. Графический процесс
Традиционной задачей компьютерной графики является синтез изображений объектов реального мира (как существующих, так и воображаемых). Для того, чтобы сделать такой синтез возможным, на входе алгоритма необходимы следующие данные:
Геометрические модели задают форму и внутреннюю структуру объекта, обычно в трехмерном евклидовом пространстве. Примеры простых моделей:
• сфера, заданная с помощью положения центра и радиуса;
17
18
Глава 1. Графический процесс и OPENGL
• куб, заданный через положение центра и длины ребра.
Анимация служит для задания модели движения, изменения формы или материала объекта с течением времени. Например, продольное перемещение объекта вдоль оси х со скоростью s м/с может быть задано с помощью формулы: x(t) = st.
Материалы и текстуры определяют, как поверхность объекта взаимодействует со светом. Материалы необходимы для получения изображения объекта, с их помощью вычисляется количество отраженного света, попадающего в «глаз» виртуального наблюдателя. Простейшая модель материала— цвет объекта.
Освещение задает расположение и характеристики источников света, что в совокупности с материалом позволяет высчитать цвет каждой точки объекта, изображение которого требуется построить. Пример модели освещения: солнце, задаваемое направлением и мощностью излучения.
Виртуальная камера определяет, как трехмерные данные будут отображаться (проецироваться) на двухмерное изображение.
Заметим, что для задач, не требующих реалистичности получаемого изображения (например, научная визуализация), материалы могут сводиться к простейшим формам, например, к разным цветам объектов, а освещение — отсутствовать.
Далее в дело вступает алгоритм синтеза изображений, в описываемом частном случае называемый процессом экранизации (rendering). Имея на входе набор моделей, алгоритм должен построить соответствующее изображение на экране монитора.
Описанная схема графической обработки от получения геометрической модели объекта до синтеза изображения на экране называется графическим процессом.
1.2. Геометрические модели
19
Остановимся более подробно на том, какую помощь OpenGL оказывает в реализации графического процесса.
Вэа и модействие
чт-
Редактирование и обработка
Получение/—' N. .
эа-рузка ^
данных П/'
Экранизация
Выводе буфер кадраг
Вывод на
П рикладная программа
OpenGL
Оконная подсистема
Рис. 1.1. Графический процесс и место OpenGL в нем.
1.2. Геометрические модели
В компьютерной графике используется большое количество разнообразных моделей для описания формы. Причиной этого является очевидная невозможность полностью оцифровать реальный объект. Следовательно, необходимо выбирать те особенности объекта, которые важны для конкретной задачи и заданного класса объектов. В частности, модели можно поделить на объемные и граничные. Объемные модели позволяют описать внутренность объекта, а граничные — геометрические свойства поверхности. Пример объемной модели показан на рисунке 1.2.
В настоящее время наибольшую популярность завоевали граничные модели, получаемые с помощью локальной кусочно-линейной аппроксимации поверхности. Такая модель представляет собой набор связанных через общие вершины многоугольников (полигонов), поэтому эти модели еще называет полигональ-
20
Глава 1. Графический процесс и OPENGL
Рис. 1.2. Объемная (воксельная) модель тора
ными. Причина популярности полигональных моделей кроется в их чрезвычайной гибкости и простоте, что позволило поддержать операции с такими моделями в графической аппаратуре. Пример граничной модели приведен на рисунке 1.3.
Основным типом геометрических моделей, поддерживаемым OpenGL, являются как раз граничные полигональные модели. Отметим, что при этом библиотека не содержит каких-либо средств поддержки хранения данных на внешних носителях. Также в библиотеке нет средств для обработки и редактирования моделей — единственной задачей OpenGL является реализация алгоритмов экранизации трехмерных моделей.
Более подробно работа с моделями описана в главе 3.
1.3. Анимация
Анимация в настоящее время в основном задается вручную (в пакетах компьютерного моделирования), либо с помощью устройств сканирования движения (motion capture), позволяющих оцифровать перемещение объектов (например — человека) или их частей (движения рук, ног, туловища).
OpenGL содержит аппарат линейных преобразований, который используется в том числе для задания простой анимации
l.Jh. Материалы
21
Рис. 1.3. Граничная полигональная модель
(поворот, перенос, масштабирование). Более сложные технологии моделирования изменения формы и положения объектов (например, на основе кривых) могут быть реализованы «поверх» библиотеки.
1.4. Материалы
Основными критериями выбора той или иной модели материала для поверхности объекта являются требования по реалистичности получаемого изображения и скорости работы алгоритма экранизации. Модель освещения применяется для каждого пикселя получаемого изображения, поэтому для задач, требующих интерактивного взаимодействия программы с пользователем, обычно выбираются простые модели.
OpenGL изначально разрабатывалась как библиотека для программирования интерактивных графических приложений, в
22
Глава 1. Графический процесс и OPENGL
ней встроена одна из самых простых моделей материала — модель Фонга. Также OpenGL поддерживает наложение текстур. В совокупности это позволяет добиваться достаточно реалистичной передачи свойств «простых» материалов типа пластика, дерева и т.п. Подробно вопрос программирования материалов в OpenGL рассматривается в главе 5.
1.5. Освещение
Модель освещения неотделима от модели материала, поэтому принципы се выбора определяются теми же требованиями. В реальном мире мы сталкиваемся с крайне сложными для моделирования условиями освещения — протяженными источниками света (небо, люминесцентные лампы), вторичным освещением (освещением от отражающих поверхностей) и т.п.
Стандарт OpenGL поддерживает точечные и параллельные источники света, цвет (мощность) которых задается в цветовой системе RGB (Red-Green-Blue). He поддерживаются протяженные источники, спектральное задание мощности источников, вторичное освещение. Однако существуют алгоритмические приемы, позволяющие моделировать и эти эффекты с помощью возможностей OpenGL. Кроме этого, всегда возможно использовать качественные алгоритмы для просчета освещения и передавать OpenGL уже вычисленные цвета точек, что позволяет задействовать аппаратные возможности для обработки геометрии.
1.6. Виртуальная камера
Параметры виртуальной камеры определяют способ отображения трехмерных объектов в их двухмерное изображение. Существует достаточно большое количество разнообразных моделей камер, различающиеся свойствами проекции и учетом ха-
1.7. Алгоритм экранизации
23
рактеристик реальных оптических систем (фотокамер, человеческого глаза).
В OpenGL поддерживается достаточно широкий класс моделей камер, описываемый линейным преобразованием в однородных координатах [15]. Этот класс ограничен моделированием камер с бесконечно малым размером диафрагмы (нет возможности передачи глубины резкости) и линейными характеристиками проекции (нет возможности моделирования нелинейных искажений).
1.7. Алгоритм экранизации
За время развития компьютерной графики было создано множество алгоритмов экранизации, обладающих различными характеристиками по степени реалистичности изображения и скорости работы. В настоящее время основными являются два во многом противоположных направления — трассировка лучей и растеризация.
Алгоритмы трассировки лучей основаны на прослеживании (трассировке) распространения световой энергии от источников света до попадания на сетчатку глаза виртуального наблюдателя (результирующее изображение). Трассировка лучей и смежные алгоритмы в основном используются для получения фотореалистичных изображений. В силу алгоритмической сложности на данный момент эти алгоритмы не получили распространения в задачах интерактивного синтеза изображений, где в основном используются подходы на основе растеризации.
Алгоритмы растеризации строят изображение с помощью преобразования геометрической модели таким способом, чтобы имитировать параметры используемой модели камеры. Т.е. для каждой точки (x,y,z) модели выполняется преобразование Т (обычно линейное), такое, что (xs,ys) = T(x,y,z), где (xs,ys) — координаты спроецированной точки на экране. В случае поли-
24
Глава 1. Графический процесс и OPENGL
тональной модели преобразование выполняется для каждой вершины полигона, после чего получаемая проекция переводится в растр на результирующей картинке. Освещение вычисляется отдельно от преобразований, обычно с помощью достаточно простой модели.
OpenGL основана на экранизации с помощью растеризации. Ориентированность на полигональные модели вкупе с использованием линейной модели камеры позволяет описать весь алгоритм экранизации в терминах алгебры матриц и векторов 4-го порядка в евклидовом пространстве. В свою очередь, это позволило перенести большую часть операций алгоритма на специализированные графические процессоры (в настоящее время ставшие стандартом).
Таким образом, алгоритм экранизации OpenGL ориентирован на интерактивные приложения с достаточно ограниченной поддержкой моделей материалов и освещения. Однако, в силу простоты и гибкости стандарта библиотеки, с помощью ее базовых функций возможно реализовать широкий спектр различных моделей вплоть до физически-точных, оставаясь в рамках требований к интерактивным приложениям (во многом за счет широкой аппаратной поддержки OpenGL).
Глава 2.
Введение в OpenGL
2.1. Основные возможности
Описывать возможности OpenGL мы будем через функции его библиотеки. Вес функции можно разделить на пять категорий:
• Функции описания примитивов определяют объекты ниж
него уровня иерархии (примитивы), которые способна отоб
ражать графическая подсистема. В OpenGL в качестве
примитивов выступают точки, линии, многоугольники и
т.д.
-
Функции описания источников света служат для описания положения и параметров источников света, расположенных в трехмерной сцене.
-
Функции задания атрибутов. С помощью задания атрибутов программист определяет, как будут выглядеть на экране отображаемые объекты. Другими словами, если с помощью примитивов определяется, что появится на экране, то атрибуты определяют способ вывода на экран.
25
26