我们很高兴宣布已推出 Aspose.3D FOSS for Java – 一个免费、开源的库,用于在 Java 应用程序中处理 3D 文件格式。该库作为纯 Java 解决方案构建,无本地依赖,可在 Java 21 及更高版本上运行,使其能够覆盖广泛的项目和环境。.
本文将介绍该库提供的功能、如何入门以及接下来的方向。.
什么是 Aspose.3D FOSS for Java??
Aspose.3D FOSS for Java 是一个轻量级的 3D 文件处理库,发布于 MIT license.。它提供了一个场景图 API,允许您加载、检查、转换并保存多种广泛使用格式的 3D 模型。该库完全使用 Java 编写,不需要外部本机二进制文件或平台特定的配置。.
源代码可在 GitHub 上获取:: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
关键亮点
- 纯粹的 Java – 无 JNI,无本地库,无平台限制。.
- Java 21+ 兼容。.
- MIT 许可证 – 在个人、商业或专有项目中使用,且没有任何限制。.
- 场景图架构 – 一个熟悉的节点、网格、相机和材质树。.
- 多格式支持 – 读取和写入 OBJ、STL、glTF 2.0 和 GLB 文件;读取 FBX 文件。.
快速入门
Maven 安装
将以下依赖项添加到您的 pom.xml:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
你的首次转换
最简单的用例是将一种格式的 3D 文件加载后保存为另一种格式。下面是一个将 OBJ 转换为 STL 的两行代码示例::
import com.aspose.threed.*;
public class QuickConvert {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("cube.obj");
scene.save("output.stl");
}
}
该 Scene class 是核心入口点。调用 Scene.fromFile() 使用文件路径加载模型,然后调用 save() 使用目标路径。库会根据文件扩展名推断格式。.
从头构建场景
你也可以以编程方式构建场景::
import com.aspose.threed.*;
public class BuildScene {
public static void main(String[] args) throws Exception {
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("Box");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3);
scene.save("scene.gltf");
}
}
这将创建一个新场景,在根节点下添加一个名为 “Box” 的子节点,将其定位在坐标 (1, 2, 3),并将结果导出为 glTF 文件。.
使用特定格式选项加载
当您需要对加载过程进行更细致的控制时,每种格式都提供了专用的选项类。例如,使用显式选项加载 STL 文件::
import com.aspose.threed.*;
public class LoadWithOptions {
public static void main(String[] args) throws Exception {
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
// Inspect the loaded scene
System.out.println("Root children: "
+ scene.getRootNode().getChildNodes().size());
// Re-export as OBJ
scene.save("part.obj");
}
}
该 Scene.fromFile() 静态方法接受任意加载选项类型:: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,,或 FbxLoadOptions.
遍历场景图
场景加载完成后,您可以遍历节点树以检查或修改其内容::
import com.aspose.threed.*;
public class TraverseScene {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("model.gltf");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println("Node: " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: " + t.getTranslation());
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println(" Vertices: "
+ mesh.getControlPoints().size());
}
}
}
}
此模式对于调试、生成模型内容报告,或在重新导出前有选择地修改场景的某些部分非常有用。.
应用变换
在三维空间中定位节点是通过 Transform 对象在每个 Node:
import com.aspose.threed.*;
public class TransformExample {
public static void main(String[] args) throws Exception {
Scene scene = new Scene();
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
child.getTransform().setScale(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 | 计算得到的世界空间变换 |
材质
该库提供了 PBR(基于物理的渲染)材质模型::
- PbrMaterial ——基于物理渲染的材质,包含 albedo、metalness、roughness、emissive color 和 transparency。这是 Java 版中唯一可用的具体材质类。.
数学工具
该 com.aspose.threed 包包括基本的数学原语::
- Vector3 – 用于位置、方向和颜色的三分量向量。.
- Matrix4 – 4x4 变换矩阵。.
- Quaternion – 旋转表示。.
- BoundingBox – 用于空间查询的轴对齐包围盒。.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)
加载和保存选项
每种格式都有专用的选项类,允许您控制导入和导出行为::
| 格式 | 加载选项 | 保存选项 |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | – (仅导入) |
例如,要导出带有美化 JSON 且坐标系翻转的 glTF::
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
支持的格式
下表概述了 Aspose.3D FOSS for Java 能够读取和写入的格式。.
| 格式 | 扩展 | 导入 | 导出 | 备注 |
|---|---|---|---|---|
| OBJ | .obj | 是 | 是 | 使用 MTL 材料 |
| STL | .stl | 是 | 是 | 二进制 + ASCII |
| glTF 2.0 | .gltf | 是 | 是 | JSON 格式 |
| GLB | .glb | 是 | 是 | 通过 GltfSaveOptions 的二进制 glTF |
| FBX | .fbx | 是 | 否 | 仅导入 |
OBJ、STL、glTF 和 GLB 支持加载和保存。FBX 仅支持导入。.
格式选择指南
选择合适的格式取决于您的使用场景::
- OBJ 在需要在 3D 工具之间实现最大兼容性时,它是理想的选择。几乎所有建模软件都能读取和写入 OBJ。它非常适合网格数据交换,但仅通过伴随的 MTL 文件携带基本的材质信息。.
- STL 是 3D 打印工作流的首选格式。它存储原始的三角形几何体,不包含材质或场景层次结构,这正是切片软件所期望的。如果你的流水线以 3D 打印机结束,STL 是最直接的选择。.
- glTF 是面向网络和实时 3D 的现代标准。它支持 PBR 材质、完整的场景层次结构,并且旨在高效传输。在构建基于网页的查看器、使用 three.js 或 Babylon.js,或面向任何实时渲染管线时,请使用 glTF。.
- FBX 深度集成于游戏开发和数字内容创作工作流中。它支持包括层次结构和材质在内的丰富场景数据。Aspose.3D FOSS for Java supports FBX 仅导入 – 用它来加载 FBX 资产并将其转换为其他格式。.
已知限制
需要注意的是 Scene.render() 是 不受支持 在 FOSS 版中。调用此方法将抛出一个 UnsupportedOperationException.。该库旨在用于基于文件的 3D 处理 – 加载、操作、转换和保存模型 – 而不是实时渲染到显示器。.
开源与许可
Aspose.3D FOSS for Java 已在以下条款下发布 MIT 许可证. 这意味着您可以自由地::
- 在商业和专有应用中使用该库。.
- 修改源代码以满足您的需求。.
- 将库作为您自己软件的一部分进行分发。.
除 MIT 许可证规定的内容外,没有版税费用、使用限制,也没有署名要求。.
完整的源代码托管在 GitHub 上,欢迎贡献:: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
系统要求
| 要求 | 细节 |
|---|---|
| Java 版本 | 21 or later |
| 依赖 | 无(纯 Java) |
| 平台 | 任何运行 JVM 的平台 |
| 构建工具 | Maven (推荐) |
快速入门
以下资源可帮助您快速上手::
- 文档 – 综合指南和 API 演练可在 Aspose.3D 文档站点.
- 知识库 – 实用操作文章和故障排除技巧位于 Aspose.3D KB.
- API 参考 – 详细的类和方法参考位于 Aspose.3D API Reference.
- 源代码 – 浏览并贡献于 GitHub.
- Maven Central – 包已发布为
com.aspose:aspose-3d-foss在 Maven Central 上。.
Common Use Cases
Here are some practical scenarios where Aspose.3D FOSS for Java fits well:
Format Conversion Pipelines
Many teams receive 3D assets in one format but need them in another. A design team might work in FBX while the web team needs glTF. The library lets you build automated conversion pipelines:
// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("asset.glb", opts);
3D Model Inspection and Validation
在将 3D 资产集成到您的应用程序之前,您可能需要验证其内容——检查节点数量、验证几何体,或确认预期的元素是否存在::
Scene scene = Scene.fromFile("model.obj");
int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);
for (Node child : scene.getRootNode().getChildNodes()) {
if (child.getEntity() instanceof Mesh) {
Mesh mesh = (Mesh) child.getEntity();
System.out.println(child.getName() + ": "
+ mesh.getControlPoints().size() + " vertices");
}
}
场景组装
您可以加载多个模型并将它们合并为一个场景::
Scene scene = new Scene();
Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");
// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
scene.getRootNode().getChildNodes().add(child);
}
scene.save("assembled.gltf");
下一步
在即将发布的文章中,我们将介绍::
- 深入探讨 scene-graph API、材质和数学工具的关键特性。.
- 实用指南,帮助您使用每种受支持的 3D 格式——OBJ、STL、glTF 和 FBX——包括加载/保存选项和批量转换模式。.
敬请关注,随时探索该库并在 GitHub 上分享您的反馈。.