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

Глава 17. Знакомство с вершинными шейдерами

Вершинный шейдер (vertex shader) — это программа, выполняемая процессором видеокарты и заменяющая этапы преобразования и освещения в фиксированном конвейере. (Это описание не является абсолютно верным, поскольку если вершинные шейдеры не поддерживаются аппаратно, они могут эмулироваться программно библиотекой времени выполнения Direct3D.) На рис. 17.1 изображена та часть конвейера визуализации, которую заменяют вершинные шейдеры.


Рис. 17.1. Вершинный шейдер заменяет этапы преобразования и освещения в фиксированном конвейере

Рис. 17.1. Вершинный шейдер заменяет этапы преобразования и освещения в фиксированном конвейере


На рис. 17.1 видно, что на вход вершинного шейдера поступает вершина в локальной системе координат и шейдер должен вернуть освещенную (окрашенную) вершину в однородном пространстве отсечения (homogeneous clip space). (В этой книге, чтобы не усложнять материал, мы не будем углубляться в детали преобразования проекции. Отметим, что пространство, в которое матрица проекции преобразует вершины называется однородным пространством отсечения. Следовательно, для того, чтобы преобразовать вершину из локального пространства в однородное пространство отсечения, необходимо выполнить следующую последовательность преобразований: мировое преобразование, преобразование вида и преобразование проекции выполняемые соответственно с помощью мировой матрицы, матрицы вида и матрицы проекции.) Для примитивов точек вершинные шейдеры могут использоваться также для управления размером.

Поскольку вершинные шейдеры — это программы, которые вы пишете сами (на HLSL) открывается огромный круг возможностей, позволяющих реализовать разнообразные графические эффекты. Например, благодаря вершинным шейдерам можно применять любой алгоритм освещения, реализуемый в коде шейдера. Мы больше не ограничены набором фиксированных алгоритмов освещения, реализованных в Direct3D. Более того, возможность управлять местоположением вершин также может применяться во многих задачах, таких как моделирование одежды, управление размером точек для систем частиц, смешивание вершин и морфинг. Помимо этого, в программируемом конвейере структура данных вершин более гибкая и может содержать больше данных, чем в фиксированном конвейере.

Вершинные шейдеры остаются достаточно новой возможностью и многие видеокарты не поддерживают их, особенно новые версии шейдеров, реализованные в DirectX 9. Чтобы проверить, какую версию шейдеров поддерживает установленная видеокарта, проверьте значение члена VertexShaderVersion структуры D3DCAPS9 воспользовавшись макросом D3DVS_VERSION, как показано в приведенном ниже фрагменте кода:

// Если поддерживаемая устройством версия шейдеров меньше 2.0
if(caps.VertexShaderVersion < D3DVS_VERSION(2, 0))
      // Значит видеокарта не поддерживает шейдеры версии 2.0

Как видите, в двух параметрах D3DVS_VERSION передаются старший и младший номер версии соответственно. На данный момент функция D3DXCompileShaderFromFile поддерживает вершинные шейдеры версий 1.1 и 2.0.


Цели
  • Изучить способы описания компонентов структуры данных вершины в программируемом конвейере.
  • Узнать о различных способах использования компонентов вершины.
  • Узнать как создать, установить и уничтожить вершинный шейдер.
  • Изучить реализацию эффекта мультипликационной визуализации с помощью вершинных шейдеров.


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

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