基元拓扑

Direct3D 支持多种基元拓扑,后者定义管道(如点列表、线列表和三角形带)将如何解释和呈现顶点。

基本基元拓扑

支持以下基本基元拓扑(或基元类型):

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

输入装配器 (IA) 阶段从顶点和索引缓冲区读取数据,将数据装配到这些基元中,然后将数据发送到剩余的管道阶段。

基元邻近度

所有 Direct3D 基元类型(点列表除外)以两个版本提供:带邻近度的基元类型和不带邻近度的基元类型。 带邻近度的基元包含一些周围的顶点,而不带邻近度的基元仅包含目标基元的顶点。 例如,线列表基元具有包含邻近度的对应线列表基元。

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

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

缠绕方向和前导顶点位置

如下图中所示,前导顶点是基元中的第一个非相邻顶点。 基元类型可以定义多个前导顶点,只要每个顶点都用于不同的基元。

  • 对于带邻近度的三角形带,前导顶点是 0、2、4、6,依此类推。
  • 对于带邻近度的线条带,前导顶点是 1、2、3,依此类推。
  • 另一方面,相邻基元没有前导顶点。

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

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

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

符号 “属性” 说明
顶点的符号 顶点 3D 空间中的点。
缠绕方向的符号 缠绕方向 装配基元时的顶点顺序。 可以是顺时针或逆时针。
前导顶点的符号 前导顶点 包含每常量数据的基元中的第一个非相邻顶点。

 

生成多个条带

你可以通过条带切割生成多个条带。 你可以通过显式调用 RestartStrip HLSL 函数或通过将特殊索引值插入索引缓冲区来执行条带切割。 此值为 –1,对于 32 位指数为 0xffffffff,对于 16 位指数为 0xffff。

索引 –1 表示显式“切割”或“重启”当前条带。 上一个索引完成上一个基元或条带,下一个索引启动新基元或条带。

有关生成多个条带的详细信息,请参阅几何着色器 (GS) 阶段

输入装配器 (IA) 阶段

图形管道