Топологии-примитивы

Direct3D 10 и более поздних версий поддерживает несколько примитивных типов (или топологий), представленных D3D_PRIMITIVE_TOPOLOGY перечислимого типа. Эти типы определяют, как вершины интерпретируются и отрисовываются конвейером.

Базовые примитивные типы

Поддерживаются следующие базовые примитивные типы:

Для визуализации каждого типа примитива см. схему далее в этом разделе статьи Направление обмотки и позиции ведущих вершин.

Этап входного ассемблер считывает данные из буферов вершин и индексов, собирает данные в эти примитивы, а затем отправляет данные на остальные этапы конвейера. (Вы можете использовать метод ID3D11DeviceContext::IASetPrimitiveTopology , чтобы указать примитивный тип для этапа ассемблеера ввода.)

Примитивная примыкаемость

Все примитивные типы Direct3D 10 и более поздних версий (кроме списка точек) доступны в двух версиях: один примитивный тип с смежностью и один примитивный тип без смежности. Примитивы с соседством содержат некоторые окружающие вершин, а примитивы без соседство содержат только вершины целевого примитива. Например, примитив списка строк (представленный значением D3D_PRIMITIVE_TOPOLOGY_LINELIST ) имеет соответствующий примитив списка строк, включающий смежность (представленную значением D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ ).

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

Например, предположим, что вы хотите нарисовать список треугольников с соседством. Список треугольников, содержащий 36 вершин (с соседством), даст 6 завершенных примитивов. Примитивы с соседством (за исключением ломаных) содержат ровно два раза больше вершин, чем эквивалентный примитив без соседства, где каждая дополнительная вершина является соседней.

Направление обмотки и положение ведущих вершин

Как показано на следующем рисунке, передняя вершина — это первая несмежная вершина в примитиве. Для типа примитива может быть задано несколько начальных вершин, если каждая из них используется для различных примитивов. Для полосы треугольников с соседством передние вершины — это 0, 2, 4, 6 и т. д. Для ломаной с соседством передние вершины — 1, 2, 3 и т. д. С другой стороны у соседнего примитива нет передних вершин.

На следующем рисунке показан порядок вершин для всех типов примитивов, которые может получить сборщик входных данных.

схема порядка вершин для типов примитивов

В следующей таблице описаны символы, использованные в предыдущем примере.

Символ name Описание
символ вершины Вершина Точка в трехмерном пространстве.
символ направления поворота Направление поворота Порядок вершин при сборке примитива. Может быть по часовой стрелке или против часовой стрелки; укажите его, вызвав ID3D11Device1::CreateRasterizerState1.
символ передней вершины Передняя вершина Первая несмежная вершина в примитиве, содержащем данные констант.

 

Создание нескольких полос

Вы можете создать несколько полос с помощью вырезания полос. Вы можете вырезать полосы, явно вызвав HLSL-функцию RestartStrip или вставив специальное значение индекса в буфер индексов. Это значение –1, т. е. 0xffffffff для 32-разрядных индексы или 0xffff для 16-разрядные индексов. Индекс –1 указывает на явное «вырезание» или «перезапуск» текущей полосы. Предыдущий индекс завершает предыдущий примитив или полосу, а следующий индекс начинает новый примитив или полосу. Дополнительные сведения о создании нескольких полос см. в разделе Geometry-Shader Stage.

Примечание

Требуется оборудование уровня компонентов 10.0 или более поздней версии, так как не все оборудование 10level9 реализует эту функцию.

 

начало работы с этапом Input-Assembler

Этапы конвейера (Direct3D 10)