Примитивные топологии
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 и т. д. С другой стороны, смежный примитив не имеет ведущих вершин.
На следующем рисунке показан порядок вершин для всех примитивных типов, которые может производить сборщик входных данных.
Символы на предыдущем рисунке описаны в следующей таблице.
Символ | Имя | Описание |
---|---|---|
символ ![]() |
Вершина | Точка в трехмерном пространстве. |
символ ![]() |
Направление ветвления | Порядок вершин при сборке примитива. Может быть по часовой стрелке или по часовой стрелке; укажите это путем вызова ID3D11Device1::CreateRasterizerState1. |
символ ![]() |
Ведущие вершины | Первая неопределимая вершина в примитиве, содержащая данные на константу. |
Создание нескольких полос
Вы можете создать несколько полос через полосу вырезания. Вы можете выполнить вырезание полосы, явно вызвав функцию RestartStrip HLSL или вставив специальное значение индекса в буфер индекса. Это значение равно –1, которое 0xffffffff для 32-разрядных индексов или 0xffff для 16-разрядных индексов. Индекс –1 указывает явное "вырезать" или "перезапуск" текущей полосы. Предыдущий индекс завершает предыдущий примитив или полосу, а следующий индекс запускает новый примитив или полосу. Дополнительные сведения о создании нескольких полос см. в разделе Geometry-Shader Этап.
Заметка
Вам потребуется уровне компонентов 10.0 или более поздней версии оборудования, так как не все оборудование 10level9 реализует эту функцию.
Связанные разделы
-
этапы конвейера (Direct3D 10)