Топологии-примитивы
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 реализует эту функцию.
Связанные темы