Jak zapisywać modele 3D w TypeScript

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/3d

Krok 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

RozszerzenieFormatNotatki
.glbglTF 2.0 BinaryZalecane dla glTF; wszystkie zasoby osadzone w jednym pliku
.gltfglTF 2.0 JSONOddzielny .bin i pliki tekstur obok JSON
.objWavefront OBJZapisuje .mtl plik materiału obok .obj gdy materiały są obecne
.stlSTLDomyślnie: binarny STL; użyj StlSaveOptions.ascii = true dla tekstu
.fbxAutodesk FBXbinarny format FBX
.3mf3D ManufacturingOdpowiedni dla przepływów pracy druku 3D
.daeCOLLADAFormat 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.


Zobacz także

 Polski