我们很高兴地宣布已可用 Aspose.3D FOSS for .NET – 一个免费、开源的库,用于在 .NET 应用中处理 3D 文件格式。该库以纯 C# 方案构建,无本机依赖,目标平台为 .NET 10.0 及更高版本,使其能够适用于广泛的项目和环境。.

本文将逐步介绍库的功能、如何入门以及后续的方向。.

Aspose.3D FOSS for .NET 是什么??

Aspose.3D FOSS for .NET 是一个轻量级的 3D 文件处理库,发布于 MIT license. 它提供了一个场景图 API,允许您加载、检查、转换并保存跨多种常用格式的 3D 模型。该库完全使用 C# 编写,无需外部本机二进制文件或平台特定配置。.

源代码可在 GitHub 上获取:: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

关键亮点

  • 纯 C# – 无 P/Invoke,无本机库,无平台限制。.
  • .NET 10.0+ 兼容。.
  • MIT 许可证 – 在个人、商业或专有项目中使用,无任何限制。.
  • 场景图架构 – 一个熟悉的节点、网格、相机和材质树。.
  • 多格式支持 – 读取和写入 OBJ、STL、glTF 2.0、GLB、FBX、Collada 和 3MF 文件。.

快速入门

NuGet 安装

将 NuGet 包添加到您的项目中::

dotnet add package Aspose.3D.Converter --version 1.0.0

您的首次转换

最简单的用例是将一种格式的 3D 文件加载后保存为另一种格式。下面是一个将 OBJ 转换为 STL 的两行代码示例::

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");

Scene 类是核心入口点。调用 scene.Open() 使用文件路径加载模型,然后调用 Save() 使用目标路径。库会根据文件扩展名推断格式。.

从头构建场景

您也可以通过编程方式构建场景::

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
var box = new Box(2, 2, 2);
var node = scene.RootNode.CreateChildNode("Box", box);

node.Transform.Translation = new FVector3(1, 2, 3);

scene.Save("scene.gltf");

这将创建一个新场景,在根节点下添加一个盒子原语作为子节点,将其定位在坐标 (1, 2, 3),并将结果导出为 glTF 文件。.

使用特定格式选项加载

当您需要对加载过程进行更细致的控制时,每种格式都提供专用的选项类。例如,使用显式选项加载 STL 文件::

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

var scene = new Scene();
var opts = new StlLoadOptions();
scene.Open("part.stl", opts);

// Inspect the loaded scene
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);

// Re-export as OBJ
scene.Save("part.obj");

scene.Open() 方法接受任意加载选项类型:: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions,,或 TmfLoadOptions.

遍历场景图

场景加载后,您可以遍历节点树以检查或修改其内容::

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.gltf");

foreach (var child in scene.RootNode.ChildNodes)
{
    Console.WriteLine("Node: " + child.Name);
    Console.WriteLine("  Translation: " + child.Transform.Translation);

    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine("  Vertices: " + mesh.ControlPoints.Count);
    }
}

此模式对于调试、生成模型内容报告,或在重新导出前有选择地修改场景的部分内容非常有用。.

应用变换

在三维空间中定位节点是通过 Transform 每个的属性 Node:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();

var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);

var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
child.Transform.Scale = new FVector3(2, 2, 2);

// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance

scene.Save("transformed.gltf");

变换遵循标准的父子继承模型:子节点的世界空间位置是其本地变换与所有祖先节点(直至根节点)变换的组合。.

包含内容

该库提供了一套围绕 3D 场景图模型设计的核心功能。.

场景图

场景图是 API 的骨干。每个 3D 文件都以树形结构表示::

角色
Scene顶层容器;场景图的根节点
Node树中的命名位置;保存变换和子节点
Entity附加到节点的可视对象的抽象基类
Mesh多边形几何——顶点、面、法线
Camera虚拟相机定义
Transform节点的局部平移、旋转和缩放
GlobalTransform计算得到的世界空间变换

内置基元

该 .NET 版包括可直接附加到节点或转换为的参数化形状类 Mesh:

  • Box – 轴对齐的盒子,宽度、高度和深度可配置。.
  • Sphere – 参数化球体,半径可配置。.
  • Cylinder – 参数化圆柱体,半径和高度可配置。.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);

材质

库提供多种材质类型::

  • LambertMaterial – 经典的仅漫反射材质,具有环境光、漫反射、发光和反射颜色分量。.
  • PhongMaterial – 在 Lambert 基础上扩展了镜面高光和光泽度。.
  • PbrMaterial – 基于物理渲染的材质,包含基色、金属度、粗糙度、遮蔽以及纹理槽。.

数学工具

Aspose.ThreeD 命名空间包括基本的数学原语::

  • FVector3 – 单精度 3 分量向量,用于位置、方向和缩放。被用于 Transform.TranslationTransform.Scale.
  • Vector4 – 单精度 4 分量向量,用于控制点和法线。.
  • Matrix4 – 4x4 变换矩阵。.
  • Quaternion – 旋转表示。用于 Transform.Rotation.
  • BoundingBox – 用于空间查询的轴对齐包围盒。.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

加载和保存选项

每种格式都有专用的选项类,允许您控制导入和导出行为::

格式加载选项保存选项
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

例如,要加载一个带有坐标翻转和法线归一化的 OBJ 文件::

var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;

scene.Open("model.obj", opts);

支持的格式

下表概述了 Aspose.3D FOSS for .NET 能够读取和写入的格式。.

格式扩展导入导出备注
OBJ.obj带 MTL 材质
STL.stl二进制 + ASCII
glTF 2.0.gltfJSON 格式
GLB.glbBinary glTF
FBX.fbxASCII 和 binary 模式
Collada.dae
3MF.3mfZIP-based 3D 制造格式

格式选择指南

选择合适的格式取决于您的使用场景::

  • OBJ 在需要在各种 3D 工具之间实现最大兼容性时,它是理想的选择。几乎所有建模应用程序都可以读取和写入 OBJ。它非常适合网格数据交换,但仅通过伴随的 MTL 文件携带基本的材质信息。.
  • STL 是 3D 打印工作流的首选格式。它存储原始的三角网格几何体,不包含材质或场景层次结构,这正是切片软件所期望的。.
  • glTF 是现代的网络和实时3D标准。它支持PBR材质、完整的场景层次结构,并且旨在高效传输。在构建基于网页的查看器或面向任何实时渲染管线时,请使用glTF。.
  • FBX 深度集成于游戏开发和数字内容创作工作流中。它支持包括层次结构和材质在内的丰富场景数据。Aspose.3D FOSS for .NET 支持 FBX 导入和导出 支持 ASCII 和二进制模式。.
  • 3MF 是一种现代的3D打印格式,支持丰富的元数据、材质以及在单个基于ZIP的包中的多对象场景。.

已知限制

Scene.Render()不受支持 在 FOSS 版中。调用此方法将抛出一个 NotImplementedException. 该库旨在用于基于文件的 3D 处理——加载、操作、转换和保存模型——而非实时渲染到显示器。.

开源与许可

Aspose.3D FOSS for .NET 在以下许可下发布 MIT 许可证. 这意味着您可以自由地::

  • 在商业和专有应用中使用该库。.
  • 修改源代码以满足您的需求。.
  • 将库作为您自己软件的一部分进行分发。.

没有版税费用、使用限制,也没有除 MIT 许可证规定之外的署名要求。.

完整的源代码托管在 GitHub 上,欢迎贡献:: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

系统要求

需求细节
.NET 版本10.0 or later
依赖项无(纯 C#)
平台任何运行 .NET 的平台
包管理器NuGet

入门指南

以下资源可帮助您快速上手::

  • 文档 – 综合指南和 API 演练可在 Aspose.3D 文档站点.
  • 知识库 – 实用操作指南和故障排除技巧在 Aspose.3D KB.
  • API 参考 – 详细的类和方法参考位于 Aspose.3D API 参考.
  • 源代码 – 浏览并在 GitHub.
  • NuGet – 包已发布为 Aspose.3D.Converter 在 NuGet 上。.

常见使用场景

以下是 Aspose.3D FOSS for .NET 适用的一些实际场景::

格式转换流水线

许多团队收到的 3D 资产是某种格式,但需要转换为另一种格式。设计团队可能使用 FBX,而 Web 团队需要 glTF。该库可帮助您构建自动化的转换流水线::

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

// Convert all incoming FBX assets to GLB for the web team
var scene = new Scene();
scene.Open("asset.fbx");

scene.Save("asset.glb");

3D Model Inspection and Validation

在将 3D 资产集成到您的应用程序之前,您可能需要验证其内容——检查节点数量、验证几何体,或确认预期元素是否存在::

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.obj");

int nodeCount = scene.RootNode.ChildNodes.Count;
Console.WriteLine("Top-level nodes: " + nodeCount);

foreach (var child in scene.RootNode.ChildNodes)
{
    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine(child.Name + ": "
            + mesh.ControlPoints.Count + " vertices");
    }
}

场景组装

您可以加载多个模型并将它们组合成一个场景::

using Aspose.ThreeD;

var scene = new Scene();

var part1 = new Scene();
part1.Open("chassis.obj");

var part2 = new Scene();
part2.Open("wheels.obj");

// Add nodes from each part into the combined scene
foreach (var child in part1.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}
foreach (var child in part2.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}

scene.Save("assembled.gltf");

下一步

在接下来的文章中,我们将介绍::

  • 深入探讨 scene-graph API、材质和数学工具的关键特性。.
  • 实用指南,帮助您使用每种受支持的 3D 格式 – OBJ、STL、glTF、FBX 和 3MF – 包括加载/保存选项和批量转换模式。.

敬请关注,随时探索该库并在 GitHub 上分享您的反馈。.