Разработка приложения для визуализации трехмерных iен с использованием карт освещения и динамического освещения
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
азработчиков, так и авторами API через MSDN. XNA Framework также имеет профессиональную поддержку аналогичную DirectX.
Популярность
Direct3D API наиболее популярное решение для платформ Windows и Xbox, а то есть для большинства разработчиков игр.
OpenGL пользуется популярностью среди профессиональных 3D программистов, но среди разработчиков игр интерес к данному API иссяк примерно в 2000-ом году. OpenGL - единственный вариант для разработки программ с аппаратным графическим ускорением под платформами не принадлежащими Microsoft.
XNA Framework популярна, в первую очередь, среди программистов, для которых графика - хобби, а также среди тех, кто начинает изучать основы программирования 2D и 3D графики. На данный момент под XNA выпущено всего несколько профессиональных продукта.
Лицензия
Очень важным аспектом в разработке программ - это лицензионные ограничения, накладываемые на API. OpenGL и Direct3D имеют лицензионные модели, которые позволяют выпускать коммерческие продукты без ограничений.
Для выпуска продукта под XNA Framework должно быть заключено лицензионное соглашение между разработчиком и Microsoft, которое ограничивает использование сетевых функций XNA. XNA Game Studio не может быть использована для разработки коммерческих игр под Xbox 360, но выпуск игр под Windows разрешен. Чтобы выпускать игры под Xbox 360, существует специальная подписка для разработчиков, размером в $99.
Таблица 1: Сравнение трех основных графических API
СвойстваOpenGLDirect3DXNAПоддержка различных платформ, числоДа, множествоДа, триДа, двеСложность освоенияВысокаяВысокаяНизкаяБазовый язык (нативный)CCC#Поддерживаемые языкиБольшинство языковБольшинство языковNET языкиВысокая производительностьДаДаНетЛицензионные ограниченияНетНетДаПоддержка производителемНетДа, платноДа, платноПлатформа БиблиотекиНативный кодНативный кодУправляемый код
1.5.3Общие принципы работы с графическими API
Direct3D и OpenGL имеют ряд серьезных различий в их структуре и наборе предоставляемых функций, но тем не менее они выполняют одну и ту же роль, а именно подготавливают систему для исполнения кода шейдера на GPU [7]. Этот процесс в общих чертах может быть разбит на следующие этапы:
. Создание графического устройства (device) представляющее собой своеобразную программную модель графического процессора. Именно через него осуществляется почти работа с GPU.
. Подготовка буфера вершин (vertex buffer), содержащего перечень координат всех вершин, а так же некоторых дополнительных параметров. К примеру, в этой роли может выступать значение освещенности вершины, ее текстурные координаты (они используются для привязки текстуры к графическому примитиву), векторы нормали и.т.д.
. Подготовка текстур. На этом этапе все текстуры используемые приложением копируются в специально отведенную для них область графической памяти, откуда, позже будут считаны шейдерной программой.
4. Загрузка файлов-эффектов, представляющих собой набор шейдеров, используемых при визуализации текущего объекта.
5. Загрузка в память графического адаптера всех матриц и констант, необходимых для исполнения эффекта. На данном этапе так же происходит ассоциация самплеров (sampler) эффекта с ранее загруженными текстурами.
. Далее следует ключевой этап - визуализация iены (Scene). Именно здесь в дело вступает графический конвейер, который проделывает всю работу по превращению набора точек в законченное трехмерное изображение.
. После окончания этапа визуализации буфер кадра содержит изображение, являющееся результатом рендеринга. Далее оно может быть либо отображено на экран, либо сохранено в текстуру.
Следует заметить, что перечисленные выше этапы едва ли можно назвать четкой инструкцией к написанию графических приложений. Часть из них можно попросту выкинуть, часть поменять местами. Все зависит от конкретной реализуемой задачи.
1.6Теоретический обзор шейдерных эффектов
1.6.1Равномерное освещение
Равномерное освещение (ambient lighting) обеспечивает постоянное начальное освещение для всей iены. Оно освещает все вершины объектов одинаково, потому что не зависит ни от каких других факторов освещения. Это самый простой и быстрый тип освещения, но при этом дает наименее реалистичный результат. Формула для вычисления этой модели освещения так же очень проста, т. к. там всего одна арифметическая операция - умножение. Для ее вычисления достаточно перемножить цвет материала на интенсивность освещения:
(1)
1.6.2Диффузионная модель освещения
Диффузная модель освещения (diffuse lighting model) - модель освещения, которая зависит от положения источника освещения и от объектной нормали поверхности. Поскольку излучение света одинаково во всех направлениях, видовой вектор не имеет значения, т.е. v = 0. Такой метод требует большего вычисления, так как изменяется для каждой вершины объекта, однако неплохо затеняет объекты и придает им объем. Свет падает, не заполняя всю поверхность одинаковым цветом (как в случае с раномерным освещением), а создается впечатление, что, свет направлен на какую либо поверхность.
Рисунок 1.2. Диффузная модель освещения
Если вектор позиции источника освещения перпендикулярен поверхности, то никакой матовости не будет наблюдаться, потому что интенсивность света зависит от угла б. Для расчета диффузной модели освещения используется формула (по закону Ламберта):
(2)
1.6.3Бликовая модель освещения
В этой модели освещения по