Здавалка
Главная | Обратная связь

Обзор архитектуры для вывода геометрии в DirectX11



В отличие от предыдущих версий, в DirectX11 отображение чего-либо на экране означает не просто вызов некого метода интерфейса, который сделает и подготовит видеоадаптер для нас. Чтобы отобразить что-то в DirectX11 нужно самостоятельно подготовить все данные для отправки их в видеоадаптер, а потом уже вызывать данный метод. Итак, рассмотрим из чего состоит графический конвейер:

Все данные, которые нужно нарисовать, то есть каркас 3d объекта загружается в вершинный и индексный буфер видеоадаптера – VertexBuffer и соответственно IndexBuffer. Каждый 3d объект состоит из вершин, эти вершины группируются по три, образуя набор полигонов – то есть треугольников, фейсов. Из наборов полигонов и состоит 3d модель.

Далее в адаптер загружается шейдер, то есть программа которая поможет видеоадаптеру обработать наши наборы вершин и полигонов. Шейдеры бывают двух видов, вершинный и пиксельный, и должны быть одновременно загружены в адаптер.Вершинныйшейдер служит промежуточным звеном между пиксельным шейдером и входящими данными вершинного буфера. В основном вершинный шейдер нужен для поворота всех точек модели таким образом чтобы модель правильно отобразилась на экране с учетом точки расположения камеры. Также, осуществляется расчет перспективные — если модель далеко, то она маленькая, если близко – большая. Словом, вершинныйшейдер отвечает за правильное расположение модели на экране и обрабатывает 3d-координаты вершин.

После того как данные обработаны, они поступают из вершинного шейдера в пиксельный. В нем происходит обработка каждой точки полигона. То есть он закрашивается. При этом цвет закраски задается в пиксельном шейдере. Также пиксельный шейдер можно запрограммировать так, чтобы цвета брались из текстуры – так и происходит в 3d играх если модель имеет текстуру. Но предположим, что вершинный шейдер выдал для каждой из трех вершин свой цвет, каким должен получиться треугольник? Правильно, трехцветным. Пиксельный шейдер интерполирует цвета для всех входящих вершин, так что они будут плавно переходить от одной вершины к другой. Для этого не нужно добавлять в пиксельный шейдер специальный код, треугольник станет цветным только потому что выходящими данными вершинного шейдера является полигон – то есть набор из трех точек, а входящими данными для пиксельного шейдера уже не является полигон и координаты этих точек. Сам адаптер плавно передвигает «точку» рисования между вершинами постепенно заполняя треугольник(полигон) сплошным цветом и при этом для каждой маленькой суб-точки закраски вызывая пиксельный шейдер. Надо сказать что отсюда следует непреложный вывод: никогда не грузите пиксельный шейдер чрезмерно кодом – нескольких строк кода почти всегда достаточно, а при лишней загрузке пиксельного шейдера могут быть серьезные тормоза – точек на экране очень много.

Теперь немного о константах. На самом деле одного лишь шейдера и подготовленного вершинного и индексного буферов зачастую недостаточно. Нужно еще и на ходу, динамически, немного «подкручивать» параметры работы шейдера. Например, изменяется положение камеры, освещение, и т.п. Для этого существуеют константы шейдера. То есть перед тем как шейдер задействуется, мы устанавливаем константы.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.