Wie man 3D-Szenen in TypeScript nach glTF/GLB exportiert
Aspose.3D FOSS unterstützt glTF 2.0 sowohl als Import- als auch Exportformat. Scene Objekt kann aus einer OBJ, FBX, STL oder anderen Quelldatei gefüllt und dann auf die .gltf (JSON + externe Binärform) oder .glb (einziger binärer Behälter) durch Einrichtung einer Flagge auf der GltfSaveOptions.
Schritt für Schritte
Schritt 1: Installieren @aspose/3d
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.
Bestätigen Sie, dass Node.js 18 oder höher aktiv ist:
node --version # must be >= 16.0.0Schritt 2: Import-Szene, GltfSaveOptions und GlTfFormat
import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';GltfFormat ist der Formatdeskriptor, den die Daten übermittelt werden. scene.save(). GltfSaveOptions alle Exportkonfigurationen tragen.
Wenn Sie auch eine Quelldatei (z. B. OBJ) laden, importieren Sie die passenden Ladeoptionen:
import { ObjLoadOptions } from '@aspose/3d/formats/obj';Schritt 3: Erstellen oder Laden einer Szene
Option A: Aus einer vorhandenen Datei laden (OBJ → GLB-Umwandlung):
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());Option B: Bauen Sie eine minimale Szene programmatisch auf.:
import { Scene, Node, Mesh } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
const childNode = new Node('cube');
scene.rootNode.addChildNode(childNode);
// Attach geometry to childNode as needed
Schritt 4: Konfiguration von GltfSaveOptions
GltfSaveOptions steuert das Ausgabeformat und die Verschlüsselungsdetails.
const saveOpts = new GltfSaveOptions();
// Set to true for a single binary .glb file
// Set to false (default) for JSON .gltf + separate .bin
saveOpts.binaryMode = true;Zusätzliche Optionen, die Sie einstellen können:
| Immobilien und Vermögenswerte | Typ der | Standard-Nummer | Wirkung |
|---|---|---|---|
binaryMode | boolean | false | true → GLB, false → glTF JSON (JSON) |
flipTexCoordV | boolean | true | Vertikal-UV-Achs für die Kompatibilität mit dem Motor |
Schritt 5: Speichern mit scene.save ((()
Über den Ausgangspfad, die GltfFormat Deskriptor und konfigurierte Optionen:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
const saveOpts = new GltfSaveOptions();
saveOpts.binaryMode = true; // produce .glb
scene.save('output.glb', GltfFormat.getInstance(), saveOpts);
console.log('Converted to GLB successfully');Um einen JSON zu erzeugen .gltf Anstelle von:
saveOpts.binaryMode = false;
scene.save('output.gltf', GltfFormat.getInstance(), saveOpts);
console.log('Exported to glTF JSON successfully');Schritt 6: Überprüfen der Ausgabedatei
Überprüfen Sie, ob die Ausgabe-Datei existiert und eine nicht Nullgröße hat:
import * as fs from 'fs';
const outputPath = 'output.glb';
const stats = fs.statSync(outputPath);
console.log(`Output file size: ${stats.size} bytes`);
if (stats.size === 0) {
throw new Error('Export produced an empty file: check scene content');
}Zur Rund- und Rücküberprüfung wird die GLB neu geladen und der Knotenanteil überprüft:
import { Scene } from '@aspose/3d';
import { GltfLoadOptions } from '@aspose/3d/formats/gltf';
const verify = new Scene();
verify.open('output.glb', new GltfLoadOptions());
let nodeCount = 0;
function countNodes(node: any): void {
nodeCount++;
for (const child of node.childNodes) countNodes(child);
}
countNodes(verify.rootNode);
console.log(`Round-trip verification: ${nodeCount} node(s) in output`);Häufige Probleme und Lösungen
OBJ-Materialdatei nach dem Export nicht gefunden Bei der Speicherung auf OBJ über scene.save('output.obj'), die .mtl Die Datenbank ist neben der .obj Die Ausgabeverzeichnis ist schreibbar und die beiden Dateien werden zusammen gehalten.
Ausgang .glb ist kleiner als erwartet / Netz fehlt Wenn die geladene Szene Knoten ohne Entitäten (z. B. leere Gruppen aus einem OBJ) enthält, wird das GLB diese Knotengemeinschaft nicht enthalten. mesh.controlPoints.length > 0 bevor du ihn gerettet hast.
Modul “@aspose/3d/formats/gltf” nicht gefunden Stellen Sie sicher, dass Sie auf Node.js 18+ und das @aspose/3d ist in derselben node_modules Als Eingangspunkt. npm ls @aspose/3d die Version 24.12.0 oder neuer zu bestätigen.
GltfFormat.getInstance (() gibt undefiniert zurück Dies deutet auf eine Versustimmung zwischen den Hauptversionen hin. @aspose/3d Paket und eine ältere Version im Cache. Löschen node_modules und . package-lock.json,Dann laufen Sie . npm install - Ich bin wieder da.
Texturen fehlen in der Ausgabe GLB Sicherstellen binaryMode = true ist so eingestellt, dass ein eigenständiges GLB erzeugt wird. Für glTF JSON-Ausgabe müssen Texturbilddateien neben der Ausgabedatei vorhanden sein, da sie durch einen relativen Pfad verwiesen werden.
Typfehler: Argument des Typs “GltfSaveOptions” ist nicht zuzuweisen. Sicherstellen, dass beide Scene und . GltfSaveOptions Die Installation von verschiedenen Programmen ist nicht möglich, wenn die Instanz des Pakets eine andere installierte Version enthält.
Häufig gestellte Fragen (FAQ)
Was ist der Unterschied zwischen glTF und GLB? glTF 2.0 JSON (.gltf) speichert die Szenegrafik als menschenlesbare JSON-Datei mit separaten .bin Die Kommission hat die Ergebnisse der Studie in den folgenden Bereichen untersucht:.glb) verpackt alles in einen einzelnen binären Container. Set binaryMode = true für GLB, false für JSON glTF.
Kann ich eine Szene exportieren, die vollständig in Code erstellt wurde (keine Quelldatei)? Ja, erstellen Sie eine Scene, hinzufügen Node Gegenstände, Anlage Mesh oder anderen Einrichtungen, dann rufen Sie die scene.save().Die Szene muss nicht aus einer geladenen Datei stammen.
Ist der Export von glTF verlustfrei? Bei Geometrie und Transformationen, ja. Materialien werden nach Möglichkeit auf die Eigenschaften von glTF-PBR-Materialien abgegrenzt. Eigenständige FBX-Mittelerweiterungen können nicht perfekt hin- und herumreisen.
Kann ich stattdessen zu STL oder 3MF exportieren? Das Muster ist identisch; importieren Sie das entsprechende Format der *SaveOptions und . *Format.getInstance():
import { StlSaveOptions, StlFormat } from '@aspose/3d/formats/stl';
const opts = new StlSaveOptions();
scene.save('output.stl', StlFormat.getInstance(), opts);Funktioniert scene.save asynchron? - Nein, ich bin nicht. scene.save() Wird der Schritt in die Winkel geschoben, so wird er nicht mehr als ein Schnittstück aus dem Schild gepackt.
Welche Node.js-Versionen werden unterstützt? Node.js 18, 20, and 22+. Node.js 16 and earlier are not supported.