功能与特性
功能与特性
此页面涵盖了所有主要功能领域的 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");特定格式选项
传递 LoadOptions 或 SaveOptions 子类以实现细粒度控制::
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 | 格式注册表和检测器 |