Node.js developers working with 3D content frequently need to convert between formats: a design tool exports OBJ, a web renderer expects GLB, a 3D printer requires STL, and a manufacturing pipeline uses 3MF. Handling these conversions with a single, consistent API reduces the number of external tools in a pipeline and keeps conversion logic inside the application code where it can be tested and versioned.
Die @aspose/3d Das Paket (v24.12.0, MIT-Lizenz) bietet eine TypeScript-First API zum Lesen und Schreiben aller wichtigen 3D-Formate in Node.js. Dieser Leitfaden führt Sie durch die gängigsten Konvertierungsworkflows.
Installation
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.Anforderungen: Node.js 18, 20 oder 22; TypeScript 5.0 oder höher. Die einzige Laufzeit-Abhängigkeit ist xmldom.
Unterstützte Formate
Die nachstehende Tabelle enthält eine Liste der in diesem Leitfaden behandelten Formate und deren Lesen/Schreiben unterstützenden Formen.
| Format der Datenbank | Erweiterung | Lesen Sie . | Schreiben . | Anmerkungen |
|---|---|---|---|---|
| OBJ | .obj | - Ja , das ist gut . | - Ja , das ist gut . | Lesen/Schreiben .mtl Materialdateien |
| GFT-Systeme | .gltf, .glb | - Ja , das ist gut . | - Ja , das ist gut . | .gltf ist JSON-Format; .glb ist selbstständig binär |
| STL | .stl | - Ja , das ist gut . | - Ja , das ist gut . | Standardformat für den 3D-Druck; binär und ASCII |
| 3MF | .3mf | - Ja , das ist gut . | - Ja , das ist gut . | Herstellungsformat mit reichen Metadaten |
| FBX | .fbx | Nicht verfügbar* | Nicht verfügbar* | Importeur/Exporter existiert, aber die automatische Erkennung des Formats ist nicht verkabelt; über das Format kann nicht genutzt werden. scene.open() |
| COLLADA | .dae | - Ja , das ist gut . | - Ja , das ist gut . | XML-basiertes Austauschformat |
OBJ unterstützt sowohl den Import als auch den Export. scene.open() und sparen mit scene.save('output.obj'), oder in ein anderes unterstütztes Format wie glTF, STL oder 3MF konvertieren.
OBJ zu GLB (Web-Zustellung)
Die Umwandlung von OBJ in binäre glTF (GLB) ist der häufigste Web-Workflow. GLB ist ein eigenständiges Binärpaket: Texturen, Geometrie und Metadaten in einer einzigen Datei, was es effizient für die HTTP-Lieferung und das direkte Laden durch Three.js, Babylon. js und Modellbesucher macht.
import { Scene } from '@aspose/3d';
function convertObjToGlb(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' selects binary GLB format
console.log(`Converted ${inputPath} -> ${outputPath}`);
}
convertObjToGlb('model.obj', 'model.glb');
Das Ausgabeformat wird aus der Dateierweiterung abgeleitet. .glb für binäre GLB oder .gltf für den separaten JSON + .bin - Das ist ein Schritt.
OBJ-STL (3D-Druckvorbereitung)
STL ist die Sprache des FDM- und SLA-3D-Drucks. Schneider wie PrusaSlicer, Bambu Studio und Chitubox akzeptieren alle ST L. Die Umwandlung von OBJ in ST l ist einfach, da beide Formate Dreieckmaschen speichern.
import { Scene } from '@aspose/3d';
function convertObjToStl(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.stl' selects STL format
console.log(`STL written to ${outputPath}`);
}
convertObjToStl('part.obj', 'part.stl');
STL speichert keine Farb-, Material- oder UV-Daten. Wenn Ihre OBJ-File Materiale verwendet, werden diese Informationen beim Export weggelassen. Für farblich erhaltende Druckformate sollten Sie stattdessen 3MF in Betracht ziehen (siehe unten).
STL zu glTF (Scanner und CAD zum Web)
Strukturierte Licht-Scanner und parametrische CAD-Exporteure führen häufig STL aus. Die Konvertierung in glTF macht die Geometrie ohne einen Server-side-Rendering-Schritt in webbasierten Viewers und AR-Plattformen zugänglich.
import { Scene } from '@aspose/3d';
function convertStlToGltf(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
// extension '.gltf' saves as JSON + .bin sidecar
scene.save(outputPath);
console.log(`glTF written to ${outputPath}`);
}
convertStlToGltf('scan_output.stl', 'scan_output.gltf');
Da STL keine Material- oder Texturinformationen enthält, wird die resultierende glTF-Datei nur Geometrie enthalten. Sie können nach Bedarf Materialien programmatisch an Szenenknoten befestigen.
3MF to glTF (Manufacturing to Visualization)
Das 3D-Herstellungssystem (3MF) wird zunehmend in additiven Fertigungsworkflows verwendet, da es neben der Geometrie Farbe, Materialien, Komponentenbäume und Druckmetadaten speichert. Die Umwandlung von 3M F in glTF ermöglicht eine nachgelagerte Visualisierung in Webtools bei gleichzeitiger Erhaltung der Szenenstruktur.
import { Scene } from '@aspose/3d';
function convert3mfToGlb(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' selects binary GLB format
console.log(`3MF -> GLB: ${outputPath}`);
}
convert3mfToGlb('assembly.3mf', 'assembly.glb');
3MF files often contain multi-component assemblies. The scene graph produced by scene.open() die Komponentenhierarchie in der scene.rootNode.childNodes, so dass Sie einzelne Teile vor der Speicherung untersuchen oder manipulieren können.
Batch-Umwandlungsmuster
Bei der Verarbeitung eines Dateiverzeichnisses wickelt man jede Konvertierung in eine try/catch So dass eine einzige korrupte Datei nicht die gesamte Charge abbrechen kann.
import { Scene } from '@aspose/3d';
import { readdirSync } from 'fs';
import { join, basename, extname } from 'path';
interface ConversionResult {
input: string;
output: string;
success: boolean;
error?: string;
}
function batchConvertToGlb(
inputDir: string,
outputDir: string,
extensions: string[] = ['.obj', '.stl', '.3mf', '.dae'] // .fbx excluded: format auto-detection not wired
): ConversionResult[] {
const results: ConversionResult[] = [];
const files = readdirSync(inputDir).filter((f) =>
extensions.includes(extname(f).toLowerCase())
);
for (const file of files) {
const inputPath = join(inputDir, file);
const outputPath = join(outputDir, basename(file, extname(file)) + '.glb');
try {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' infers GLB format
results.push({ input: inputPath, output: outputPath, success: true });
} catch (err) {
const message = err instanceof Error ? err.message : String(err);
results.push({ input: inputPath, output: outputPath, success: false, error: message });
console.error(`Failed to convert ${file}: ${message}`);
}
}
const succeeded = results.filter((r) => r.success).length;
console.log(`Batch complete: ${succeeded}/${results.length} files converted.`);
return results;
}
// Usage
batchConvertToGlb('./input', './output');
Das obige Muster liest jede unterstützte Dateierweiterung aus einem Eingabeverzeichnis, konvertiert in GLB und protokolliert alle Fehler ohne die Schleife zu stoppen. Die zurückgegebene Array von ConversionResult Objekte können für die Berichterstattung oder den Neuaufruf der Logik verwendet werden.
Schlussfolgerung
@aspose/3d Deckt die gesamte Palette der Formatkonvertierungsbedürfnisse in einer Node.js TypeScript-Anwendung mit einem konsistenten Zwei-Schritt-API ab: scene.open() zum Laden, scene.save() Die wichtigste Einschränkung zu erinnern ist, dass FBX Importeur und Exporter Klassen existieren aber Format-Auto-Detection noch nicht verdrahtet ist so können FB X Dateien nicht über geladen werden scene.open().
Für weitere Informationen über die Scene, Node,und . Mesh Die in diesen Beispielen verwendeten Klassen, siehe die Referenzseiten der Klasse dieser Dokumentation.