功能与特性

功能与特性

此页面涵盖了所有主要功能领域的 aspose-3d-foss 26.1.0 并提供可运行的 Java 示例。.


加载和保存场景

scene.open() 加载文件;; scene.save() 导出它::

import com.aspose.threed.Scene;

Scene scene = new Scene();
scene.open("input.obj");
scene.save("output.glb");

静态工厂替代方案::

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.stl");

特定格式选项

传递 LoadOptionsSaveOptions 子类以实现细粒度控制::

import com.aspose.threed.*;

Scene scene = new Scene();
ObjLoadOptions opts = new ObjLoadOptions();
opts.setFlipCoordinateSystem(true);
scene.open("model.obj", opts);

GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setFlipCoordinateSystem(true);
scene.save("model.glb", saveOpts);

注意:: FBX 仅支持导入;FBX 导出在 FOSS 版本中未实现。仅 二进制 FBX 支持导入的文件 — ASCII FBX 会抛出错误 ImportException.


构建场景图

创建节点并附加实体::

Scene scene = new Scene();
Node root = scene.getRootNode();

Mesh mesh = new Mesh("myMesh");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 10, 0));
mesh.createPolygon(0, 1, 2);

Node meshNode = root.createChildNode("triangle", mesh);

网格操作

创建一个 Mesh 以编程方式使用控制点和多边形::

Mesh mesh = new Mesh("custom");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 10, 0));
mesh.getControlPoints().add(new Vector4(0, 10, 0));
mesh.createPolygon(0, 1, 2, 3);

变换

每个 Node 携带一个 Transform:

Node node = scene.getRootNode().createChildNode("moved", new Mesh());
node.getTransform().setTranslation(10, 0, 5);
node.getTransform().setScale(2, 2, 2);

通过读取世界空间 node.getGlobalTransform().getMatrix().


材质

将材质分配给节点::

PbrMaterial mat = new PbrMaterial("shiny");
mat.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0));
mat.setMetallicFactor(0.5);
mat.setRoughnessFactor(0.3);

scene.getRootNode().createChildNode("red_mesh", mesh, mat);

材质类型:: Material (基础),, PbrMaterial (PBR 金属-粗糙度)。.


技巧与最佳实践

  • 使用 Scene.fromFile() 用于在不需要自定义选项时进行单行加载
  • 使用…以编程方式构建网格 createPolygon() 用于自定义几何体
  • 使用 .glb 扩展用于紧凑的二进制 glTF 输出
  • 检查 node.getEntity() != null 在转换之前
  • STL 导出会 自动对多边形面进行三角化。二进制 STL 导出仅写入每个多边形面的前 3 个顶点——四边形或 n 边形面会被静默截断。ASCII STL 导出会写入所有顶点索引,这会导致非三角形面的面块格式错误。始终向 STL 导出传递已预先三角化的网格(全部为三角形面),以避免数据丢失或输出无效。.

常见问题

问题原因修复
加载时异常不受支持或已损坏的文件验证文件能在 3D 查看器中打开
OBJ 加载后缺少材质.mtl 未找到文件放置 .mtl 在旁边 .obj;;确保已启用材质
导入后比例不匹配不同的单位系统应用一个 Transform 加载后缩放

FAQ

如何检测文件的格式??

FileFormat format = FileFormat.detect("unknown.bin");
System.out.println(format.getExtension());

我可以从流加载吗??

是的。. scene.open() 接受一个 InputStream.

哪些格式同时支持导入和导出??

OBJ、STL 和 glTF/GLB 支持双向操作。FBX 仅限导入;在 FOSS 版本中未实现导出功能。.


API 参考摘要

类 / 方法描述
Scene顶层 3D 场景容器
scene.open()通过路径或流加载 3D 文件
scene.save()将场景导出到文件或流
Scene.fromFile()静态工厂用于加载并返回一个 Scene
Node场景层级节点
node.createChildNode()创建并附加子节点
Mesh带有控制点和面列表的多边形网格
mesh.createPolygon()定义多边形面
Mesh.toMesh()转换或克隆网格几何
Transform局部平移、旋转和缩放
FileFormat格式注册表和检测器
 中文