Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Скачать 0.66 Mb.
|
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 Глава 2. Введение в OPENGL В качестве атрибутов OpenGL позволяет задавать цвет, характеристики материала, текстуры, параметры освещения. Функции визуализации позволяют задать положение наблюдателя в виртуальном пространстве, параметры объектива камеры. Зная эти параметры, система сможет не только правильно построить изображение, но и отсечь объекты, оказавшиеся вне поля зрения. Набор функций геометрических преобразований позволяет программисту выполнять различные преобразования объектов— поворот, перенос, масштабирование. При этом OpenGL может выполнять дополнительные операции, такие как использование сплайнов для построения линий и поверхностей, удаление невидимых фрагментов изображений, работа с изображениями на уровне пикселей и т.д. 2.2. Интерфейс OpenGL OpenGL состоит из набора библиотек. Все базовые функции хранятся в основной библиотеке, для обозначения которой в дальнейшем мы будем использовать аббревиатуру GL. Помимо основной, OpenGL включает в себя несколько дополнительных библиотек. Первая из них — библиотека утилит GL(GLU — GL Utility). Все функции этой библиотеки определены через базовые функции GL. В состав GLU вошла реализация более сложных функций, таких как набор популярных геометрических примитивов (куб, шар, цилиндр, диск), функции построения сплайнов, реализация дополнительных операций над матрицами и т.п. OpenGL не включает в себя никаких специальных команд для работы с окнами или ввода информации от пользователя. Поэтому были созданы специальные переносимые библиотеки 2.2. Интерфейс OPENGL 27 Прикладная программа Г]—| Буфер кадра Рис. 2.1. Организация библиотеки OpcnGL для обеспечения часто используемых функций взаимодействия с пользователем и для отображения информации с помощью оконной подсистемы. Наиболее популярной является библиотека GLUT (GL Utility Toolkit). Формально GLUT не входит в OpenGL, но de facto включается почти во все его дистрибутивы и имеет реализации для различных платформ. GLUT предоставляет только минимально необходимый набор функций для создания OpenGL-приложения. Функционально аналогичная библиотека GLX менее популярна. В дальнейшем в этой книге в качестве основной будет рассматриваться GLUT. Кроме того, функции, специфичные для конкретной оконной подсистемы, обычно входят в ее прикладной программный интерфейс. Так, функции, поддерживающие выполнение OpenGL, есть в составе Win32 API и X Window. На рисунке 2.1 схематически представлена организация системы библиотек в версии, работающей под управлением системы Windows. Аналогичная организация используется и в других версиях OpenGL. 28 Глава 2. Введение в OPENGL 2.3. Архитектура OpenGL Функции OpenGL реализованы в модели клиент-сервер. Приложение выступает в роли клиента — оно вырабатывает команды, а сервер OpenGL интерпретирует и выполняет их. Сам сервер может находиться как на том же компьютере, на котором находится клиент (например, в виде динамически загружаемой библиотеки — DLL), так и на другом (при этом может быть использован специальный протокол передачи данных между машинами). GL обрабатывает и рисует в буфере кадра графические примитивы с учетом некоторого числа выбранных режимов. Каждый примитив — это точка, отрезок, многоугольник и т.д. Каждый режим может быть изменен независимо от других. Определение примитивов, выбор режимов и другие операции описываются с помощью команд в форме вызовов функций прикладной библиотеки. Примитивы определяются набором из одной или более вершин (vertex). Вершина определяет точку, конец отрезка или угол многоугольника. С каждой вершиной ассоциируются некоторые данные (координаты, цвет, нормаль, текстурные координаты и т.д.), называемые атрибутами. В подавляющем большинстве случаев каждая вершина обрабатывается независимо от других. С точки зрения архитектуры, графическая система OpenGL является конвейером, состоящим из нескольких последовательных этапов обработки графических данных. Команды OpenGL всегда обрабатываются в том порядке, в котором они поступают, хотя могут происходить задержки перед тем, как проявится эффект от их выполнения. В большинстве случаев OpenGL предоставляет непосредственный интерфейс, т.е. определение объекта вызывает его визуализацию в буфере кадра. С точки зрения разработчиков, OpenGL — это набор команд, |