netlib.narod.ru< Назад | Оглавление | Далее >

Конвейер визуализации

Прежде чем вы сможете показать трехмерную сцену, сцена должна быть преобразована в изображение: матрицу пикселей. Таким образом трехмерная сцена может быть показана на обычном мониторе. Процесс, используемый для преобразования описания сцены в изображение называется визуализацией (rendering). На рис. 8.1 показана высокоуровневая диаграмма используемого в XNA конвейера визуализации.


Рис. 8.1. Конвейер визуализации XNA

Рис. 8.1. Конвейер визуализации XNA


Объекты трехмерной сцены описываются через их сетки, а объекты сеток описываются своими вершинами. У вершин сетки может быть много различных атрибутов, таких как местоположение, цвет, нормаль и координаты текстуры.

В начале процесса визуализации вершины сетки объекта передаются в конвейер визуализации, где проходят через стадии обработки вершин, растеризации и обработки пикселей. В результате этого процесса генерируется много пикселей, готовых к сохранению в финальном изображении сцены. На последнем этапе конвейера визуализации, объединении вывода, определяется, какие пиксели будут эффективно сохранены в итоговом изображении, а какие отброшены. Решение принимается на основе глубины пикселя, прозрачности и некоторых других атрибутов.

Конвейер визуализации: фиксированный и программируемый

В старых версиях интерфейсов программирования приложений (API, application programming interface) DirectX и OpenGL все этапы конвейера визуализации были фиксированными (запрограммированными заранее). Это означало, что ко всем передаваемым на визуализацию данным применялась заранее запрограммированная обработка. В результате все игры были вынуждены использовать один и тот же процесс визуализации, позволяющий менять только несколько фиксированных параметров. В результате выходило много игр с похожей графикой.

С появлением графических процессоров (GPU, Graphics Processing Unit) стало возможным программировать некоторые этапы конвейера визуализации. Программирование этих этапов осуществлялось путем создания небольших программ, называемых шейдерами (shader). Шейдеры позволяют вам определить входные и выходные данные каждого программируемого этапа в GPU, а также какая обработка будет выполняться внутри каждого этапа. Применяя шейдеры вы можете создать множество новых эффектов для игр, которые были невозможны при использовании фиксированного конвейера.

Конвейер визуализации в XNA

В XNA вы должны использовать шейдеры для визуализации любого объекта! Применять шейдеры в XNA необходимо, потому что он не поддерживает фиксированный (заранее запрограммированный) конвейер визуализации. Это вызвано тем, что XNA предназначен для целевых платформ Windows и Xbox 360, а аппаратура Xbox 360 не поддерживает полностью фиксированный конвейер визуализации. Обратите внимание, что в конвейере визуализации Xbox 360 все еще остаются несколько показанных на рис. 8.1 фиксированных этапов, таких как растеризация и объединение вывода.

Чтобы упростить разработку игр, устранив необходимость программирования шейдеров, XNA предоставляет некоторые вспомогательные классы, инкапсулирующие использование шейдеров. Например, для рисования двухмерных спрайтов вы можете использовать класс SpriteBatch, а для рисования трехмерных моделей можно применять класс BasicEffect. Эти два класса используют шейдеры абсолютно незаметно для вас. Недостаток применения таких вспомогательных классов в том, что они позволяют менять лишь небольшой набор параметров визуализации, подобно старому фиксированному конвейеру.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz