Jak zapisywać modele 3D w TypeScript
Aspose.3D FOSS dla TypeScript zapisuje sceny we wszystkich obsługiwanych formatach przy użyciu jednego scene.save() wywołania. Format wyjściowy jest wykrywany automatycznie na podstawie rozszerzenia pliku. Ten przewodnik opisuje zapisywanie do każdego formatu oraz używanie opcji specyficznych dla formatu.
Przewodnik krok po kroku
Krok 1: Zainstaluj @aspose/3d
npm install @aspose/3dKrok 2: Załaduj lub utwórz scenę
Możesz albo załadować istniejący plik, albo zbudować scenę programowo przed zapisem.
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();Krok 3: Zapisz z automatycznym wykrywaniem formatu
scene.save(path) wykrywa format wyjściowy na podstawie rozszerzenia pliku:
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');Krok 4: Użyj opcji zapisu specyficznych dla formatu
Aby uzyskać precyzyjną kontrolę, przekaż obiekt opcji specyficzny dla formatu:
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);Krok 5: Zapisz do bufora (w pamięci)
Użyj scene.saveToBuffer() aby uzyskać wyjście jako a Buffer bez zapisywania na dysk:
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.
Krok 6: Zweryfikuj wynik
Po zapisaniu sprawdź, czy plik istnieje i ma niezerowy rozmiar:
import * as fs from 'fs';
const stats = fs.statSync('output.glb');
console.log(`Saved output.glb: ${stats.size} bytes`);Macierz wsparcia formatów
| Rozszerzenie | Format | Notatki |
|---|---|---|
.glb | glTF 2.0 Binary | Zalecane dla glTF; wszystkie zasoby osadzone w jednym pliku |
.gltf | glTF 2.0 JSON | Oddzielny .bin i pliki tekstur obok JSON |
.obj | Wavefront OBJ | Zapisuje .mtl plik materiału obok .obj gdy materiały są obecne |
.stl | STL | Domyślnie: binarny STL; użyj StlSaveOptions.ascii = true dla tekstu |
.fbx | Autodesk FBX | binarny format FBX |
.3mf | 3D Manufacturing | Odpowiedni dla przepływów pracy druku 3D |
.dae | COLLADA | Format wymiany oparty na XML |
Typowe problemy i rozwiązania
Error: Unsupported format przy zapisywaniu
Sprawdź, czy rozszerzenie pliku odpowiada obsługiwanemu formatowi. Biblioteka używa rozszerzenia do wykrywania formatu; plik o nazwie output.xyz zakończy się niepowodzeniem.
.obj plik zostaje zapisany, ale materiały są brakujące
Podczas zapisywania OBJ, biblioteka materiałów (.mtl) jest zapisywana automatycznie obok .obj. Oba pliki muszą znajdować się w tym samym katalogu przy ponownym otwieraniu. Jeśli potrzebujesz tylko geometrii, ustaw ObjSaveOptions.enableMaterials = false.
Duży .gltf z oddzielnymi teksturami
Użyj .glb zamiast .gltf; pakuje dane binarne w jeden samodzielny plik. Ustaw GltfSaveOptions.binaryMode = true przy przekazywaniu GltfSaveOptions instancję.
Najczęściej zadawane pytania
Czy mogę zapisać do wielu formatów w jednym uruchomieniu?
Tak; wywołaj scene.save() wielokrotnie z różnymi ścieżkami:
scene.save('output.glb');
scene.save('output.stl');
scene.save('output.obj');Czy zapisywanie modyfikuje scenę?
Nie. scene.save() jest operacją tylko do odczytu na grafie sceny. Możesz zapisać tę samą scenę w wielu formatach bez żadnych skutków ubocznych.
Czy mogę nadpisać plik źródłowy?
Tak. Przekaż tę samą ścieżkę do scene.save() której użyłeś w scene.open(). Biblioteka zapisuje do bufora, a następnie zapisuje na dysk.