如何在 TypeScript 中保存 3D 模型
Aspose.3D FOSS for TypeScript 可将场景保存为所有受支持的格式,只需一次调用 scene.save() 调用。输出格式会根据文件扩展名自动检测。本指南介绍如何保存为每种格式以及使用特定格式的选项。.
分步指南
步骤 1:安装 @aspose/3d
npm install @aspose/3d步骤 2:加载或构建场景
可以先加载已有文件,或在保存前以编程方式构建场景。.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
// Load from file
const scene = new Scene();
scene.open('source.obj', new ObjLoadOptions());
// Or create a new empty scene
const emptyScene = new Scene();步骤 3:使用自动检测的格式保存
scene.save(path) 根据文件扩展名检测输出格式::
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('input.obj', new ObjLoadOptions());
// Save as binary glTF
scene.save('output.glb');
// Save as JSON glTF
scene.save('output.gltf');
// Save as STL
scene.save('output.stl');
// Save as OBJ
scene.save('output.obj');
// Save as FBX
scene.save('output.fbx');
// Save as 3MF
scene.save('output.3mf');
// Save as COLLADA
scene.save('output.dae');步骤 4:使用特定格式的 SaveOptions
如需细粒度控制,传入特定格式的选项对象::
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
// Export to GLB with specific options
const saveOptions = new GltfSaveOptions();
saveOptions.binaryMode = true; // produce GLB (binary glTF)
scene.save('output.glb', saveOptions);步骤 5:保存到缓冲区(内存中)
使用 scene.saveToBuffer() 获取输出为 Buffer 而不写入磁盘::
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
const buffer = scene.saveToBuffer('output.glb');
console.log(`Buffer size: ${buffer.length} bytes`);
// Send via HTTP, upload to S3, etc.
步骤 6:验证输出
保存后,检查文件是否存在且大小非零::
import * as fs from 'fs';
const stats = fs.statSync('output.glb');
console.log(`Saved output.glb: ${stats.size} bytes`);格式支持矩阵
| 扩展名 | 格式 | 备注 |
|---|---|---|
.glb | glTF 2.0 二进制 | 推荐用于 glTF;所有资源嵌入单个文件中 |
.gltf | glTF 2.0 JSON | 分离的 .bin 以及与 JSON 并存的纹理文件 |
.obj | Wavefront OBJ | 写入 .mtl 材质文件放在旁边 .obj 当存在材质时 |
.stl | STL | 默认:二进制 STL;使用 StlSaveOptions.ascii = true 用于文本 |
.fbx | Autodesk FBX | 二进制 FBX 格式 |
.3mf | 3D Manufacturing | 适用于 3D 打印工作流 |
.dae | COLLADA | 基于 XML 的交换格式 |
常见问题及解决方案
Error: Unsupported format 保存时
检查文件扩展名是否匹配受支持的格式。库使用扩展名来检测格式;如果文件名为 output.xyz 将会失败。.
.obj 文件已保存,但材质缺失
保存 OBJ 时,材质库(.mtl)会自动与之一起写入 .obj. 重新打开时两个文件必须位于同一目录。如果只需要几何体,请设置 ObjSaveOptions.enableMaterials = false.
大 .gltf 使用独立纹理
使用 .glb 而不是 .gltf;;它将二进制数据打包成单个自包含文件。设置 GltfSaveOptions.binaryMode = true 在传递一个 GltfSaveOptions 实例。.
常见问答
我可以在一次运行中保存为多种格式吗??
是的;调用 scene.save() 多次使用不同的路径::
scene.save('output.glb');
scene.save('output.stl');
scene.save('output.obj');保存会修改场景吗??
否。. scene.save() 是对场景图的只读操作。您可以将同一场景保存为多种格式,而不会产生任何副作用。.
我可以覆盖源文件吗??
是的。将相同的路径传递给 scene.save() 您在 scene.open().。库先写入缓冲区,然后写入磁盘。.