Компьютерная графика - это достаточно сложная, основательно проработанная дисциплина, предметом изучения которой является создание, хранение и обработка моделей и их изображений с помощью ЭВМ.
3D графика применяется во множестве различных областей: в науке, для наглядного изображения каких-то не до конца изученных процессов, в видеоиграх, которые давно не ограничиваются компьютерной платформой, в кинематографе для создания сложнейших спецэффектов, в медицине, строительстве, рекламе, и т.д. Имея качественную модель, можно увидеть объект, который не существует, посмотреть его со всех сторон, окунуться в виртуальный мир компьютерных игр, сидя дома перед экраном компьютера.
Следуя правилам создания качественной 3D модели, можно добиться эффекта присутствия, эффекта реальности. То есть, такие объекты отличаются от других правдоподобностью. В наше время реалистичные 3D изображения являются пиком совершенства в игровой, рекламной, строительной индустрии.
Моделирование 3D изображений это достаточно ресурсоемкая задача, ставящаяся перед современными вычислительными системами. И, несмотря на постоянное совершенствование техники, стремительное развитие технологий, требования к задачам остаются неизменно высокими, т.к. с ростом возможностей растут и требования. То есть, помимо оптимизации технической базы требуется оптимизация на уровне прикладного программирования.
Одним из таких методов оптимизации является грамотное использование графической библиотеки OpenGL, а именно, программирование на шейдерах. Оно дает возможность переложить часть сложных вычислений, связанных с отрисовкой сцены, с центрального процессора на, специально предназначенный для этого, графический процессор, являющийся аппаратной частью видеокарты.
Целью данной дипломной работы является построение реалистичного изображения трехмерных объектов с использованием библиотеки OpenGL и шейдеров.
1 Библиотека OpenGL
1.1 Основные возможности OpenGL
OpenGL является одним из самых распространенных прикладных программных интерфейсов (API - Application Programming Interface) к графической аппаратуре для разработки приложений в области двумерной и трехмерной графики.
Библиотека содержит в себе около 120 команд, которые может использовать программист для задания объектов и операций, необходимых для написания интерактивного графического приложения.
Основными особенностями этой графической библиотеки являются:
Стабильность - все нововведения создаются таким образом, чтобы сохранялась совместимость с предыдущим обеспечением.
Кроссплатформенность - независимо от используемой операционной системы, OpenGL гарантирует одинаковый визуальный результат. Кроме того, эти приложения работают и на рабочих станциях, и на суперкомпьютерах.
Интуитивно понятный интерфейс и продуманная структура, что обеспечивает легкость применения.
Библиотека OpenGL была разработана как единый независимый программный интерфейс для работы с графикой, который может быть реализован на любой платформе. По этой причине в ней нет функций создания окна, захвата пользовательского ввода, для этого нужно использовать средства операционной системы, на которой вы работаете. Также в ней нет высокоуровневых функций для создания трехмерных объектов, они строятся разбиением необходимых моделей на ряд геометрических примитивов - точек, линий, полигонов.
Основные функции, которые выполняет OpenGL можно разделить на несколько групп:
1. Функции описания примитивов - определяют объекты нижнего уровня, то есть конструируют фигуры из геометрических примитивов, создавая математическое описание объекта.
2. Функции описания источников света - позволяют описать параметры источника света и его положение в пространстве.
3. Функции задания атрибутов - атрибуты определяют способ вывода на экран. Другими словами. С помощью атрибутов задается цвет, характеристики материала, текстуры, параметры освещения.
4. Функции визуализации - позиционируют объекты в трехмерном пространстве и задают положение наблюдателя.
5. Функции геометрических преобразований - преобразуют математическое описание модели с ее атрибутами в пиксели на экране. Этот процесс называется растеризацией.
Перед нами была поставлена задача, спроектировать реалистичную сцену, освещаемую методом Фонга, и затененную по алгоритму карты теней. Для этого требовалось изучить некоторые методы стандарта OpenGL. Благодаря OpenGL и его шейдерной программе процесс построения этой модели был сведен к прикладному математическому решению и использованию небольшого количества ресурсов, что сводит математические расчеты к минимуму.
Выпускная квалификационная работа была выполнена под руководством консультанта старшего преподавателя кафедры программирования Н.Б. Буториной. Была разработана и реализована архитектура классов, способных отрисовывать трехмерные сцены с использованием основных методов OpenGL.
Создано демонстрационное приложение с использованием этой библиотеки. Реализованы алгоритмы 3D графики: освещение методом Фонга с текстурированием объекта и отрисовка теней алгоритмом карты теней с использованием техники сглаживания Percentage Closer Filtering (PCF).
А также, были проведены эксперименты, связывающие сложность сцены и время выполнения программы. В ходе эксперимента было выявлено, что сложность сцены несущественно влияет на скорость отрисовки кадра.
ЦП: AMD E-350 Proceccor 1.60 GHz .
GPU: Radeon HD 6330M Эффективная тактовая частота памяти 1800 МГц,
Память 1024 МБ.
Таблица 1 - Соотношение количества объектов сцены и времени отрисовки 1 кадра
Количество объектов Время, сек
1 0.00145484
3 0.00274012
6 0.00380818
12 0.00420133
100 0.00551013
1000 0.00631255