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


Примитивные топологии

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 реализует эту функцию.

 

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

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