索引数组包含引用顶点位置数组中元素的整数。这些整数称为索引。
Unity 使用索引将顶点位置连接成面。构成每个面的索引数量取决于网格Unity 的主要图形图元。网格构成 3D 世界的很大一部分。Unity 支持三角形或四边形多边形网格。Nurbs、Nurms、细分曲面必须转换为多边形。更多信息
参见 术语表的拓扑结构。
在 Mesh
类中,可以使用 Mesh.GetIndices 获取此数据,并使用 Mesh.SetIndices 设置此数据。Unity 还将此数据存储在 Mesh.triangles 中,但此较旧的属性效率较低且用户友好性较差。
注意:“点”拓扑结构不会创建面;相反,Unity 会在每个位置渲染单个点。所有其他网格拓扑结构都使用多个索引来创建面或边。
例如,对于一个网格,其索引数组包含以下值
0,1,2,3,4,5
如果网格具有三角形拓扑结构,则前三个元素 (0,1,2) 标识一个三角形,接下来的三个元素 (3, 4, 5) 标识另一个三角形。一个顶点可以参与的面的数量没有限制。这意味着同一个顶点可以在索引数组中出现多次。例如,索引数组可以包含以下值
0,1,2,1,2,3
如果网格具有三角形拓扑结构,则前三个元素 (0,1,2) 标识一个三角形,接下来的三个元素 (1,2,3) 标识另一个与第一个三角形共享顶点的三角形。
索引数组中每组顶点的顺序称为绕序。Unity 使用绕序来确定面是正面还是背面,进而确定是渲染面还是剔除面(将其排除在渲染之外)。默认情况下,Unity 渲染正面多边形并剔除背面多边形。Unity 使用顺时针绕序,这意味着 Unity 将任何索引以顺时针方向连接的面视为正面。
上图演示了 Unity 如何使用绕序。每个面的顶点顺序决定了该面的法线方向,Unity 将其与当前摄像机一个组件,用于创建场景中特定视点的图像。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
参见 术语表视角的前向方向进行比较。如果法线指向远离当前摄像机的前向方向,则为背面。较近的三角形按 (1, 2, 3) 的顺序排列,相对于当前视角而言为顺时针方向,因此三角形为正面。较远的三角形按 (4, 5, 6) 的顺序排列,从这个视角来看为逆时针方向,因此三角形为背面。