Com desar models 3D a TypeScript
Aspose.3D FOSS for TypeScript guarda escenes a tots els formats compatibles amb una única crida scene.save(). El format de sortida es detecta automàticament a partir de l’extensió del fitxer. Aquesta guia cobreix com desar a cada format i l’ús d’opcions específiques del format.
Guia pas a pas
Pas 1: Instal·la @aspose/3d
npm install @aspose/3dPas 2: Carrega o construeix una escena
Carregueu un fitxer existent o creeu una escena programàticament abans de desar.
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();Pas 3: Desa amb format detectat automàticament
scene.save(path) detecta el format de sortida a partir de l’extensió del fitxer:
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');Pas 4: Utilitzeu les SaveOptions específiques del format
Per a un control detallat, passeu un objecte d’opcions específic del format:
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);Pas 5: Desa a un buffer (en memòria)
Utilitzeu scene.saveToBuffer() per obtenir la sortida com a Buffer sense escriure al disc:
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('glb');
console.log(`Buffer size: ${buffer.length} bytes`);
// Send via HTTP, upload to S3, etc.
Pas 6: Verifica la sortida
Després de desar, verifica que el fitxer existeixi i tingui una mida diferent de zero:
import * as fs from 'fs';
const stats = fs.statSync('output.glb');
console.log(`Saved output.glb: ${stats.size} bytes`);Matriu de suport de formats
| Extensió | Format | Notes |
|---|---|---|
.glb | glTF 2.0 binari | Recomanat per a glTF; tots els actius incrustats en un únic fitxer |
.gltf | glTF 2.0 JSON | Fitxers .bin i textures separats al costat del JSON |
.obj | Wavefront OBJ | Escriu el fitxer de material .mtl al costat de .obj quan hi ha materials |
.stl | STL | Per defecte: STL binari; utilitza StlSaveOptions.ascii = true per a text |
.fbx | Autodesk FBX | Format FBX binari |
.3mf | Fabricació 3D | Adequat per a fluxos de treball d’impressió 3D |
.dae | COLLADA | Format d’intercanvi basat en XML |
Problemes comuns i solucions
Error: Unsupported format en desar
Comproveu que l’extensió del fitxer coincideixi amb un format compatible. La biblioteca utilitza l’extensió per detectar el format; un fitxer anomenat output.xyz fallarà.
.obj el fitxer es desa però falten materials
En desar OBJ, la biblioteca de materials (.mtl) s’escriu automàticament al costat del .obj. Ambdós fitxers han d’estar al mateix directori en tornar a obrir. Si només necessiteu geometria, establiu ObjSaveOptions.enableMaterials = false.
Gran .gltf amb textures separades
Utilitzeu .glb en lloc de .gltf; agrupa dades binàries en un únic fitxer autònom. Establiu GltfSaveOptions.binaryMode = true quan passeu una instància de GltfSaveOptions.
Preguntes freqüents
Puc desar en diversos formats en una sola execució?
Sí; crida scene.save() diverses vegades amb diferents camins:
scene.save('output.glb');
scene.save('output.stl');
scene.save('output.obj');Desar modifica l’escena?
No. scene.save() és una operació de només lectura al gràfic de l’escena. Podeu desar la mateixa escena en diversos formats sense cap efecte secundari.
Puc sobreescriure el fitxer d’origen?
Sí. Passa el mateix camí a scene.save() que vas utilitzar a scene.open(). La biblioteca escriu a una memòria intermèdia i després escriu al disc.