拆分合并网格

您可以将 3D 场景的所有网格拆分为多个子网格。同样,您可以使用 C# 以编程方式将多个网格合并为一个网格。本文介绍了不同场景下 3D 网格的拆分和合并:

3D 场景网格拆分器或合并 - C# API 安装

Aspose.3D for .NET API 可用于使用 C# 以编程方式拆分或合并 3D 网格。您可以通过从 Downloads 部分安装 API 或使用以下 NuGet 安装命令来配置 API:

PM> Install-Package Aspose.3D

使用 C# 以编程方式拆分每个材质的场景网格

像 FBX 格式这样的 3D 文件可以包含场景的多个网格。如果尚未为网格指定单一材质,您可以将所有网格拆分为每种材质的多个子网格。请按照以下步骤按材质分割场景的网格:

  1. 加载输入 3D 文件。
  2. 使用 SplitMesh 方法拆分所有网格。
  3. 保存带有分割网格的输出文件。

以下代码显示了如何使用 C# 以编程方式分割每个材质的场景网格:

// 加载输入 FBX 3D 文件
Scene scene = new Scene("test.fbx");

// 拆分所有网格
PolygonModifier.SplitMesh(scene, SplitMeshPolicy.CloneData);

// 保存带有分割网格的输出文件
scene.Save("test-splitted.fbx", FileFormat.FBX7500ASCII);

使用 C# 以编程方式按特定材质拆分网格

您可以通过手动指定材质来拆分网格。通过这种方式,您可以创建仅包含一种材质的多个对象。出于演示目的,以下代码创建了一个具有 6 个平面的盒子网格。然后,您将通过使用以下步骤手动指定材质来拆分原始网格:

  1. 用六个平面创建一个盒子的网格。
  2. 其次,创建一个材料元素并为每个平面指定索引。
  3. 使用 SplitMeshPolicy 枚举拆分网格。

下面的代码解释了如何使用 C# 以编程方式通过特定材料分割网格:

// 创建一个盒子的网格(一个盒子由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);

mat.Indices.Clear();
mat.Indices.AddRange(new int[] { 0, 0, 0, 1, 1, 1 });

// 现在将其拆分为 2 个子网格,第一个网格将包含 0/1/2 个平面,第二个网格将包含第 3/4/5 个平面。
// 我们使用了 CompactData 策略,每个平面都会有自己的控制点信息或基于控制点的顶点元素信息。
planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CompactData);

在 C# 中以编程方式将 3D 文件中的网格合并为单个网格

您可以通过以下步骤将不同的网格合并为一个有效的网格:

  1. 加载输入 3D 场景文件。
  2. 合并所有网格。
  3. 最后,对合并的网格进行编码。

以下代码详细说明了如何使用 C# 以编程方式将网格合并为单个网格:

// 加载输入的 3D 场景
Scene scene = new Scene("LAD-TOP.rvm");

// 合并所有网格
Mesh mesh = PolygonModifier.MergeMesh(scene);

// 将此网格编码为 PLY 格式
FileFormat.PLY.Encode(mesh, "LAD-TOP.ply");

获得免费临时许可证

您可以获得 免费评估许可证 用于测试 API,没有任何限制。

结论

总之,您已经学习了如何合并或拆分 3D 场景的网格。 API 公开了用于拆分或合并一个或多个网格的不同方法,您可以根据需要使用这些方法。此外,请随时访问文档,其中还解释了其他几个功能。如有任何疑问,请通过 免费支持论坛 与我们联系。

也可以看看