基元拓扑
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 硬件都实现此功能。
相关主题