基元拓扑

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

基本基元类型

支持以下基本基元类型:

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

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

基元相邻

所有 Direct3D 10 及更高基元类型(点列表除外)均在两个版本中可用:一个基元类型与相邻,一个没有相邻的基元类型。 具有相邻的基元包含一些周围的顶点,而没有相邻的基元仅包含目标基元的顶点。 例如,行列表基元(由 D3D_PRIMITIVE_TOPOLOGY_LINELIST 值表示)具有包含相邻的对应行列表基元(由 D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ 值表示)。

相邻基元旨在提供有关几何图形的详细信息,并且只能通过几何着色器查看。 相邻对于使用剪影检测、阴影卷延伸等的几何着色器非常有用。

例如,假设你想要绘制具有相邻的三角形列表。 包含 36 个顶点(带相邻)的三角形列表将生成 6 个已完成的基元。 相邻的基元(除线条条外)包含的顶点与等效基元的顶点完全相同,其中每个附加顶点都是相邻顶点。

绕组方向和前导顶点位置

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

下图显示了输入汇编程序可以生成的所有基元类型的顶点排序。

基元类型的顶点排序关系图

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

象征 名字 描述
顶点符号 顶点 三维空间中的点。
绕行方向的 符号 绕行方向 组合基元时的顶点顺序。 可以是顺时针或反时针;通过调用 ID3D11Device1::CreateRasterizerState1来指定此项。
前导顶点符号 前导顶点 包含每常量数据的基元中的第一个非相邻顶点。

 

生成多个条带

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

注意

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

 

Input-Assembler 阶段 入门

管道阶段(Direct3D 10)