Com desar models 3D en TypeScript
Aspose.3D FOSS per TypeScript desa escenes a tots els formats compatibles amb una única scene.save() crida. El format de sortida es detecta automàticament a partir de l’extensió del fitxer. Aquesta guia cobreix com desar a cada format i com utilitzar les 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
Carrega un fitxer existent o construeix 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: Utilitza SaveOptions específics del format
Per a un control detallat, passa 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)
Utilitza 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('output.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 existeix i té 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 Binary | Recomanat per a glTF; tots els actius incrustats en un únic fitxer |
.gltf | glTF 2.0 JSON | Separar .bin i fitxers de textures al costat del JSON |
.obj | Wavefront OBJ | Escriu .mtl fitxer de material al costat .obj quan hi ha materials |
.stl | STL | Per defecte: STL binari; usa StlSaveOptions.ascii = true per a text |
.fbx | Autodesk FBX | Format FBX binari |
.3mf | 3D Manufacturing | 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ò els materials falten
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 comptes de .gltf; agrupa dades binàries en un únic fitxer autònom. Estableix GltfSaveOptions.binaryMode = true en passar un GltfSaveOptions instància.
Preguntes freqüents
Puc desar a diversos formats en una sola execució?
Sí; crida scene.save() varias vegades amb rutes diferents:
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 sobrescriure el fitxer d’origen?
Sí. Passeu la mateixa ruta a scene.save() que vau utilitzar a scene.open(). La biblioteca escriu a un buffer i després escriu al disc.