Поделиться через


Практическое руководство. Инициализация этапа Tessellator

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

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

Этап tessellator является этапом фиксированной функции, нет шейдера для создания и не устанавливается состояние. Он получает все свое состояние установки от этапа шейдера корпуса; После инициализации этапа шейдера корпуса автоматически инициализируется этап тесселлатора.

Инициализация этапа тесселлатора

  • Инициализация этапа шейдера корпуса с помощью ID3D11DeviceContext::HSSetShader.

    void HSSetShader(
      ID3D11HullShader *pHullShader,  
      ID3D11ClassInstance *const *ppClassInstances,
      UINT NumClassInstances
    );
    

    ppClassInstances — это указатель на массив интерфейсов шейдеров, представленный указателями ID3D11ClassInstance и количеством интерфейсов, представленных NumClassInstances. Если они не используются, для этих параметров можно задать значение NULL и 0 соответственно.

После инициализации этапа шейдера корпуса также следует инициализировать этап шейдера домена.

Использование Direct3D 11

Общие сведения о тесселяции