基元拓扑

Direct3D 10 及更高版本支持由D3D_PRIMITIVE_TOPOLOGY枚举类型表示的多种基元类型 (或拓扑 ) 。 这些类型定义管道如何解释和呈现顶点。

基本基元类型

支持以下基本基元类型:

有关每个基元类型的可视化效果,请参阅本主题后面的 绕组方向和前导顶点位置中的图示。

输入装配器阶段从顶点和索引缓冲区读取数据,将数据组装到这些基元中,然后将数据发送到剩余的管道阶段。 (可以使用 ID3D11DeviceContext::IASetPrimitiveTopology 方法指定输入汇编程序阶段的基元类型。)

基元相邻

除点列表) 之外, (的所有 Direct3D 10 及更高基元类型都提供两个版本:一个具有相邻的基元类型,一个没有相邻的基元类型。 带邻近度的基元包含一些周围的顶点,而不带邻近度的基元仅包含目标基元的顶点。 例如,由 D3D_PRIMITIVE_TOPOLOGY_LINELIST 值表示的行列表基元 () 具有相应的行列表基元,其中包含由D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ value 表示的相邻 ( 。)

相邻基元旨在提供有关你的几何图形的更多信息,只能通过几何着色器查看。 邻近度对使用剪影检测、阴影卷挤压等技术的几何着色器很有用。

例如,假设你想要绘制带邻近度的三角形列表。 包含 36 个顶点的三角形列表(带邻近度)将产生 6 个已完成的基元。 带邻近度的基元(线条带除外)包含的顶点数正好是不带邻近度的等效基元的顶点数的两倍,其中每个多出的顶点都是相邻顶点。

绕组方向和前导顶点位置

如下图中所示,前导顶点是基元中的第一个非相邻顶点。 基元类型可以定义多个前导顶点,只要每个顶点都用于不同的基元。 对于带邻近度的三角形带,前导顶点是 0、2、4、6,依此类推。 对于带邻近度的线条带,前导顶点是 1、2、3,依此类推。 另一方面,相邻基元没有前导顶点。

下图显示了输入装配器可生成的所有基元类型的顶点顺序。

基元类型的顶点顺序的图示

下表描述了上图中的符号。

符号 “属性” 说明
顶点的符号 顶点 3D 空间中的点。
缠绕方向的符号 缠绕方向 装配基元时的顶点顺序。 可以顺时针或逆时针;通过调用 ID3D11Device1::CreateRasterizerState1 来指定此项。
前导顶点的符号 前导顶点 包含每常量数据的基元中的第一个非相邻顶点。

 

生成多个条带

你可以通过条带切割生成多个条带。 你可以通过显式调用 RestartStrip HLSL 函数或通过将特殊索引值插入索引缓冲区来执行条带切割。 此值为 –1,对于 32 位指数为 0xffffffff,对于 16 位指数为 0xffff。 索引 –1 表示显式“切割”或“重启”当前条带。 上一个索引完成上一个基元或条带,下一个索引启动新基元或条带。 有关生成多个条带的详细信息,请参阅 几何着色器阶段

注意

你需要 功能级别 10.0 或更高的硬件,因为并非所有 10level9 硬件都实现此功能。

 

使用Input-Assembler阶段入门

管道阶段 (Direct3D 10)