基元拓扑
Direct3D 支持多种基元拓扑,后者定义管道(如点列表、线列表和三角形带)将如何解释和呈现顶点。
基本基元拓扑
支持以下基本基元拓扑(或基元类型):
有关每个基元类型的可视化,请参阅缠绕方向和前导顶点位置中本主题后面的图示。
输入装配器 (IA) 阶段从顶点和索引缓冲区读取数据,将数据装配到这些基元中,然后将数据发送到剩余的管道阶段。
基元邻近度
所有 Direct3D 基元类型(点列表除外)以两个版本提供:带邻近度的基元类型和不带邻近度的基元类型。 带邻近度的基元包含一些周围的顶点,而不带邻近度的基元仅包含目标基元的顶点。 例如,线列表基元具有包含邻近度的对应线列表基元。
相邻基元旨在提供有关你的几何图形的更多信息,只能通过几何着色器查看。 邻近度对使用剪影检测、阴影卷挤压等技术的几何着色器很有用。
例如,假设你想要绘制带邻近度的三角形列表。 包含 36 个顶点的三角形列表(带邻近度)将产生 6 个已完成的基元。 带邻近度的基元(线条带除外)包含的顶点数正好是不带邻近度的等效基元的顶点数的两倍,其中每个多出的顶点都是相邻顶点。
缠绕方向和前导顶点位置
如下图中所示,前导顶点是基元中的第一个非相邻顶点。 基元类型可以定义多个前导顶点,只要每个顶点都用于不同的基元。
- 对于带邻近度的三角形带,前导顶点是 0、2、4、6,依此类推。
- 对于带邻近度的线条带,前导顶点是 1、2、3,依此类推。
- 另一方面,相邻基元没有前导顶点。
下图显示了输入装配器可生成的所有基元类型的顶点顺序。
下表描述了上图中的符号。
符号 | “属性” | 说明 |
---|---|---|
![]() |
顶点 | 3D 空间中的点。 |
![]() |
缠绕方向 | 装配基元时的顶点顺序。 可以是顺时针或逆时针。 |
![]() |
前导顶点 | 包含每常量数据的基元中的第一个非相邻顶点。 |
生成多个条带
你可以通过条带切割生成多个条带。 你可以通过显式调用 RestartStrip HLSL 函数或通过将特殊索引值插入索引缓冲区来执行条带切割。 此值为 –1,对于 32 位指数为 0xffffffff,对于 16 位指数为 0xffff。
索引 –1 表示显式“切割”或“重启”当前条带。 上一个索引完成上一个基元或条带,下一个索引启动新基元或条带。
有关生成多个条带的详细信息,请参阅几何着色器 (GS) 阶段。
相关主题