PolygonModifier.SplitMesh

SplitMesh(Node, SplitMeshPolicy, bool, bool)

通过 VertexElementMaterial 将网格拆分为子网格。每个子网格只使用一种材质。在节点上执行网格拆分。

public static void SplitMesh(Node node, SplitMeshPolicy policy, bool createChildNodes = false, 
    bool removeOldMesh = true)
参数类型描述
节点节点
策略SplitMeshPolicy
createChildNodesBoolean为每个子网格创建子节点。
removeOldMeshBoolean在拆分后移除旧网格;如果此参数为 false,旧网格和新网格将共存。

示例

以下代码演示了如何使用材质索引将盒子拆分为子网格。

// 创建一个盒子网格(盒子由 6 个平面组成)
Mesh box = (new Box()).ToMesh();
// 在此网格上创建材质元素
VertexElementMaterial mat = (VertexElementMaterial)box.CreateElement(VertexElementType.Material, MappingMode.Polygon, ReferenceMode.Index);
// 并为每个平面指定不同的材质索引
mat.Indices.AddRange(new int[] { 0, 1, 2, 3, 4, 5 });
// 现在将其拆分为 6 个子网格,我们在每个平面上指定了 6 种不同的材质,每个平面将成为一个子网格。
// 我们使用了 CloneData 策略,每个平面将拥有相同的控制点信息或基于控制点的顶点元素信息。
Mesh[] planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CloneData);

// 现在将其拆分为 2 个子网格,第一块网格将包含 0/1/2 平面,第二块网格将包含第 3/4/5 平面。
mat.Indices.Clear();
mat.Indices.AddRange(new int[] { 0, 0, 0, 1, 1, 1 });
// 我们使用了 CompactData 策略,每个平面将拥有各自的控制点信息或基于控制点的顶点元素信息。
planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CompactData);

另请参见


SplitMesh(Scene, SplitMeshPolicy, bool)

通过 VertexElementMaterial 将网格拆分为子网格。每个子网格只使用一种材质。在场景的所有节点上执行网格拆分。

public static void SplitMesh(Scene scene, SplitMeshPolicy policy, bool removeOldMesh = true)
参数类型描述
场景场景
策略SplitMeshPolicy
removeOldMeshBoolean

示例

以下代码演示了如何使用材质索引将盒子拆分为子网格。

// 创建一个盒子网格(盒子由 6 个平面组成)
Mesh box = (new Box()).ToMesh();
// 在此网格上创建材质元素
VertexElementMaterial mat = (VertexElementMaterial)box.CreateElement(VertexElementType.Material, MappingMode.Polygon, ReferenceMode.Index);
// 并为每个平面指定不同的材质索引
mat.Indices.AddRange(new int[] { 0, 1, 2, 3, 4, 5 });
// 现在将其拆分为 6 个子网格,我们在每个平面上指定了 6 种不同的材质,每个平面将成为一个子网格。
// 我们使用了 CloneData 策略,每个平面将拥有相同的控制点信息或基于控制点的顶点元素信息。
Mesh[] planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CloneData);

// 现在将其拆分为 2 个子网格,第一块网格将包含 0/1/2 平面,第二块网格将包含第 3/4/5 平面。
mat.Indices.Clear();
mat.Indices.AddRange(new int[] { 0, 0, 0, 1, 1, 1 });
// 我们使用了 CompactData 策略,每个平面将拥有各自的控制点信息或基于控制点的顶点元素信息。
planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CompactData);

另请参见


SplitMesh(Mesh, SplitMeshPolicy)

通过 VertexElementMaterial 将网格拆分为子网格。每个子网格只使用一种材质。原始网格不会被更改。

public static Mesh[] SplitMesh(Mesh mesh, SplitMeshPolicy policy)

返回值

新拆分的网格

示例

以下代码演示了如何使用材质索引将盒子拆分为子网格。

// 创建一个盒子网格(盒子由 6 个平面组成)
Mesh box = (new Box()).ToMesh();
// 在此网格上创建材质元素
VertexElementMaterial mat = (VertexElementMaterial)box.CreateElement(VertexElementType.Material, MappingMode.Polygon, ReferenceMode.Index);
// 并为每个平面指定不同的材质索引
mat.Indices.AddRange(new int[] { 0, 1, 2, 3, 4, 5 });
// 现在将其拆分为 6 个子网格,我们在每个平面上指定了 6 种不同的材质,每个平面将成为一个子网格。
// 我们使用了 CloneData 策略,每个平面将拥有相同的控制点信息或基于控制点的顶点元素信息。
Mesh[] planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CloneData);

// 现在将其拆分为 2 个子网格,第一块网格将包含 0/1/2 平面,第二块网格将包含第 3/4/5 平面。
mat.Indices.Clear();
mat.Indices.AddRange(new int[] { 0, 0, 0, 1, 1, 1 });
// 我们使用了 CompactData 策略,每个平面将拥有各自的控制点信息或基于控制点的顶点元素信息。
planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CompactData);

另请参见