如何在 TypeScript 中保存 3D 模型

如何在 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`);

格式支持矩阵

扩展名格式备注
.glbglTF 2.0 二进制推荐用于 glTF;所有资源嵌入单个文件中
.gltfglTF 2.0 JSON分离的 .bin 以及与 JSON 并存的纹理文件
.objWavefront OBJ写入 .mtl 材质文件放在旁边 .obj 当存在材质时
.stlSTL默认:二进制 STL;使用 StlSaveOptions.ascii = true 用于文本
.fbxAutodesk FBX二进制 FBX 格式
.3mf3D Manufacturing适用于 3D 打印工作流
.daeCOLLADA基于 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().。库先写入缓冲区,然后写入磁盘。.


另请参阅

 中文