Jak konwertować modele 3D w TypeScript
Aspose.3D FOSS for TypeScript konwertuje pomiędzy formatami 3D, ładując je do neutralnej Scene reprezentacji i zapisując do formatu docelowego. Ten przewodnik pokazuje najczęstsze konwersje.
Przewodnik krok po kroku
Krok 1: Zainstaluj @aspose/3d
npm install @aspose/3dKrok 2: Załaduj plik źródłowy
Utwórz Scene i wywołaj scene.open(). Użyj klasy specyficznej dla formatu *LoadOptions, aby uzyskać najlepsze wyniki.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);Krok 3: Zapisz w formacie docelowym
Wywołaj scene.save() z ścieżką wyjściową. Format wyjściowy jest wykrywany na podstawie rozszerzenia pliku.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Uwaga: FBX jest nieobsługiwany przez
scene.save()automatyczne wykrywanie. Rozszerzenie.fbxnie jest podłączone do żadnego eksportera — zapisywanie do.fbxcicho zapisuje zawartość w formacie OBJ. Użyj OBJ, glTF, STL, 3MF lub COLLADA dla niezawodnego wyjścia.
Krok 4: Przykłady typowych konwersji
OBJ do glTF / GLB
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
scene.save('model.glb');
console.log('Converted OBJ → GLB');FBX — Nieobsługiwane
Automatyczne wykrywanie FBX nie jest podłączone w
scene.open(). Plik.fbxprzekazany doscene.open()nie jest rozpoznawany przez żaden detektor formatu i przechodzi do parsera STL, który zakończy się niepowodzeniem lub wygeneruje śmieci. Klasy importera/eksportera FBX istnieją w bibliotece, ale wymagają bezpośredniego wywołania, a nie wysokopoziomowego APIopen()/save(). Użyj COLLADA, OBJ lub glTF jako alternatywy dla FBX.
glTF do STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA do 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Krok 5: Konwersja wsadowa wielu plików
import * as fs from 'fs';
import * as path from 'path';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const inputDir = './input';
const outputDir = './output';
fs.mkdirSync(outputDir, { recursive: true });
const objFiles = fs.readdirSync(inputDir).filter(f => f.endsWith('.obj'));
for (const file of objFiles) {
const inputPath = path.join(inputDir, file);
const outputFile = file.replace('.obj', '.glb');
const outputPath = path.join(outputDir, outputFile);
const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);
console.log(`Converted ${file} → ${outputFile}`);
}Obsługiwana macierz konwersji
| Z \ Do | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX nie jest obsługiwany przez wysokopoziomowe open()/save() API — format nie jest podłączony do automatycznego wykrywania. Wszystkie powyższe komórki FBX mają znak ✗.
Typowe problemy i rozwiązania
Materiały są tracone po konwersji
Materiały OBJ (usemtl, .mtl plik) są ładowane, gdy ObjLoadOptions.enableMaterials = true. Podczas zapisywania do glTF, właściwości materiałów PBR są mapowane automatycznie. Złożone materiały (proceduralne, wielowarstwowe) mogą być konwertowane z obniżoną wiernością.
Siatka jest skalowana niepoprawnie
Różne formaty używają różnych domyślnych jednostek (milimetry dla STL, metry dla glTF). Użyj ObjLoadOptions.scale przy ładowaniu lub StlSaveOptions.scaleFactor przy zapisywaniu, aby znormalizować jednostki.
Niezgodność systemu współrzędnych (model odwrócony lub obrócony)
Niektóre formaty używają układu Y‑up po prawej stronie, inne Z‑up. Użyj ObjLoadOptions.flipCoordinateSystem = true lub zastosuj obrót węzła głównego po załadowaniu.
Najczęściej zadawane pytania
Czy konwersja zachowuje animacje?
Dane animacji są zachowywane przy konwertowaniu między formatami, które je obsługują (np. COLLADA → glTF). STL i OBJ nie zawierają danych animacji. FBX nie jest obsługiwany za pośrednictwem scene.open()/scene.save(), więc obiegi animacji FBX nie są dostępne w wysokopoziomowym API.
Czy dane tekstury są zachowane?
Tekstury odwoływane przez materiały OBJ lub osadzone w glTF są przenoszone do grafu sceny. Podczas zapisywania do GLB (binaryMode = true) bufor binarny jest osadzony w jednym pliku. Dla wyjścia OBJ tekstury są zapisywane jako osobne pliki obok .obj.
Czy mogę konwertować wiele plików jednocześnie?
scene.open() i scene.save() są synchroniczne. Użyj Node.js worker_threads do przetwarzania równoległego.