Примитивы - SIISII/DirectX Wiki

Direct3D обрабатывает геометрию в виде трёх типов базовых примитивов — точек, отрезков и треугольников. Эти примитивы определяются соответственно одной, двумя или тремя вершинами каждый, находящимися в списке вершин. Сам список вершин формируется [стадией сбора исходных данных](/SIISII/DirectX/wiki/Стадия сбора исходных данных в Direct3D10 и Direct3D11) на основе содержимого привязанных к ней вершинного и индексного [буферов](/SIISII/DirectX/wiki/Буферы в Direct3D10 и Direct3D11): в вершинном буфере содержатся характеристики (в частности, координаты) вершин, а индексный буфер определяет порядок их выборки из вершинного буфера; если индексный буфер отсутствует, вершины выбираются в порядке их следования в вершинном буфере.

Формирование примитивов из списка вершин производится в соответствии с типом топологии, установленным для стадии сбора исходных данных. Имеются следующие типы топологии, определённые в перечислении D3D_PRIMITIVE_TOPOLOGY (для Direct3D10 это перечисление называется D3D10_PRIMITIVE_TOPOLOGY; определяемые в нём константы имеют префикс D3D10_ вместо D3D_):

Прочие варианты, определённые в данном перечислении, относятся к тесселяции; здесь они не рассматриваются.

Описанные варианты топологии представлены на следующем рисунке; цифры на нём указывают номера соответствующих вершин в списке.

Для треугольников важную роль играет порядок обхода вершин (по или против часовой стрелки), поскольку он может использоваться для отбрасывания невидимых треугольников (обращённых к камере не той стороной), что выполняется на [стадии растеризации](/SIISII/DirectX/wiki/Стадия растеризации в Direct3D10 и Direct3D11).

Если используется индексный буфер, то можно определить несколько несвязанных полос отрезков или треугольников в одном вершинном буфере. Для этого несвязанные отрезки разделяются индексом, имеющим значение —1. Заметим, что эта возможность требует аппаратной поддержки уровня DirectX 10, более ранние графические процессоры могут не иметь такой возможности.

Разорвать полосу и начать новую можно и в шейдере, используя функцию RestartStrip.