Wie man 3D-Modelle in TypeScript konvertiert
Aspose.3D FOSS for TypeScript konvertiert zwischen 3D-Formaten, indem es in eine neutrale Scene-Darstellung lädt und in das Zielformat speichert. Dieser Leitfaden zeigt die gängigsten Konvertierungen.
Schritt-für-Schritt-Anleitung
Schritt 1: Installieren Sie @aspose/3d
npm install @aspose/3dSchritt 2: Laden Sie die Quelldatei
Erstellen Sie ein Scene und rufen Sie scene.open() auf. Verwenden Sie die formatbezogene *LoadOptions‑Klasse für beste Ergebnisse.
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);Schritt 3: In das Zielformat speichern
Rufen Sie scene.save() mit dem Ausgabepfad auf. Das Ausgabeformat wird anhand der Dateierweiterung erkannt.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Hinweis: FBX wird nicht unterstützt von
scene.save()automatischer Erkennung. Die.fbxErweiterung ist zu keinem Exporter verbunden — das Speichern nach.fbxschreibt stillschweigend OBJ‑Format‑Inhalt statt. Verwenden Sie OBJ, glTF, STL, 3MF oder COLLADA für zuverlässige Ausgabe.
Schritt 4: Häufige Konvertierungsbeispiele
OBJ zu 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 — Nicht unterstützt
FBX-Autoerkennung ist nicht in
scene.open()integriert. Eine.fbx-Datei, die anscene.open()übergeben wird, wird von keinem Formatdetektor erkannt und fällt auf den STL‑Parser zurück, der fehlschlägt oder Müll erzeugt. FBX‑Import‑/Export‑Klassen existieren in der Bibliothek, erfordern jedoch einen direkten Aufruf statt der High‑Level‑open()/save()‑API. Verwenden Sie COLLADA, OBJ oder glTF als FBX‑Alternative.
glTF nach STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA nach 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Schritt 5: Mehrere Dateien stapelweise konvertieren
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}`);
}Unterstützte Konvertierungsmatrix
| Von \ Nach | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX wird über die High-Level open()/save() API nicht unterstützt — das Format ist nicht in die automatische Erkennung eingebunden. Alle oben genannten FBX‑Zellen sind ✗.
Häufige Probleme und Lösungen
Materialien gehen nach der Konvertierung verloren
OBJ-Materialien (usemtl, .mtl Datei) werden geladen, wenn ObjLoadOptions.enableMaterials = true. Beim Speichern in glTF werden PBR-Materialeigenschaften automatisch zugeordnet. Komplexe Materialien (prozedural, mehrschichtig) können mit reduzierter Treue konvertiert werden.
Mesh wird falsch skaliert
Verschiedene Formate verwenden unterschiedliche Standardmaßeinheiten (Millimeter für STL, Meter für glTF). Verwenden Sie ObjLoadOptions.scale beim Laden oder StlSaveOptions.scaleFactor beim Speichern, um die Einheiten zu normalisieren.
Koordinatensystem-Fehlanpassung (Modell gespiegelt oder rotiert)
Einige Formate verwenden rechtsseitiges Y‑up, andere Z‑up. Verwenden Sie ObjLoadOptions.flipCoordinateSystem = true oder wenden Sie nach dem Laden eine Rotation auf den Wurzelknoten an.
Häufig gestellte Fragen
Behält die Konvertierung Animationen bei?
Animationsdaten werden beim Konvertieren zwischen Formaten, die sie unterstützen (z. B. COLLADA → glTF), beibehalten. STL und OBJ enthalten keine Animationsdaten. FBX wird über scene.open()/scene.save() nicht unterstützt, sodass FBX‑Animations‑Round‑Trips über die High‑Level‑API nicht verfügbar sind.
Werden Texturdaten beibehalten?
Texturen, die von OBJ‑Materialien referenziert werden oder in glTF eingebettet sind, werden in den Szenengraph übernommen. Beim Speichern in GLB (binaryMode = true) wird der Binärpuffer in einer einzigen Datei eingebettet. Für OBJ‑Ausgabe werden Texturen als separate Dateien neben dem .obj gespeichert.
Kann ich viele Dateien parallel konvertieren?
scene.open() und scene.save() sind synchron. Verwenden Sie Node.js worker_threads für die parallele Verarbeitung.