Главная страница

Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика


Скачать 0.66 Mb.
НазваниеРуководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Дата21.10.2022
Размер0.66 Mb.
Формат файлаdocx
Имя файла221937-83556.docx
ТипРуководство
#747097
страница3 из 30
1   2   3   4   5   6   7   8   9   ...   30
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 — это набор команд,

2.3. Архитектура OPENGL

1   2   3   4   5   6   7   8   9   ...   30


написать администратору сайта