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.
Úřad pro bezpečnost a ochranu zdraví @aspose/3d Tento balíček (v24.12.0, MIT licence) poskytuje API typu TypeScript-first pro čtení a psaní všech hlavních 3D formátů v Node.js. Tato příručka proběhne nejčastějšími konverzními pracovními postupy.
Instalace
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.Požadavky: Node.js 18, 20 nebo 22; TypeScript 5.0 nebo novější. Jediná závislost na běhové době je xmldom.
Podporované formáty
V níže uvedené tabulce jsou uvedeny formáty, na něž se vztahuje tato příručka a jejich podpora pro čtení/psaní.
| Formát | Rozšíření | Čtěte. | Píšeš. | Poznámky |
|---|---|---|---|---|
| OBJ | .obj | Ano , ano . | Ano , ano . | Čtení/psaní .mtl materiální soubory |
| glTF | .gltf, .glb | Ano , ano . | Ano , ano . | .gltf je formát JSON; .glb je samostatná binární |
| STL | .stl | Ano , ano . | Ano , ano . | Standardní 3D tiskový formát; binární a ASCII |
| 3MF | .3mf | Ano , ano . | Ano , ano . | Výrobní formát s bohatými metadaty |
| FBX | .fbx | Ne* | Ne* | Existují dovozci/vývozci, ale automatická detekce formátu není propojená; nepoužitelná prostřednictvím systému ISOFIX. scene.open() |
| COLLADA | .dae | Ano , ano . | Ano , ano . | Formát výměny na základě XML |
OBJ podporuje jak dovoz, tak vývoz. scene.open() a ušetřit s scene.save('output.obj'), nebo převést do jakéhokoli jiného podporovaného formátu, jako je glTF, STL nebo 3MF.
OBJ na GLB (Doručení prostřednictvím webu)
Konverze OBJ na binární glTF (GLB) je nejběžnějším webovým pracovním postupem. GLB je samostatný binární balíček: textury, geometrie a metadata v jednom souboru, což ho činí efektivním pro doručení HTTP a přímé načítání pomocí Three.js, Babylon. js a modela-viewer .
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');
Výstupní formát je odvoděn z rozšíření souboru. Use .glb pro binární GLB nebo .gltf pro samostatný JSON + .bin rozvržení.
OBJ na STL (3D tisková přípravka)
STL je jazykem 3D tisku FDM a SLA. Střížeče jako PrusaSlicer, Bambu Studio a Chitubox všechny přijímá ST L. Konverze z OBJ na STl je jednoduchá, protože oba formáty ukládají trojúhelníkové sítě .
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 neuchovává data o barvě, materiálu nebo UV. Pokud soubor OBJ používá skupiny materiálů, tyto informace jsou při exportu vynechány. Pro formáty tisku zachování barev zvažte místo toho 3MF (viz níže).
STL na glTF (skanér a CAD na web)
Konverze na glTF umožňuje přístup k geometrii v webových prohlížečích a AR platformách bez kroku renderingu na straně serveru.
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');
Protože STL neobsahuje žádné informace o materiálu nebo texturě, výsledný soubor glTF bude obsahovat pouze geometrii. Můžete programově připojit materiál k uzlům scény po načtení v případě potřeby.
3MF to glTF (Manufacturing to Visualization)
3D Manufacturing Format (3MF) se stále více používá v aditivních výrobních pracovních procesech, protože ukládá barvy, materiály, stromky komponent a tiskové metadata vedle geometrie. Konverze 3Mf na glTF umožňuje vizualizaci dolů ve webových nástrojích při zachování struktury scény.
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() zachovává hierarchii složek v scene.rootNode.childNodes, takže můžete před uložením zkontrolovat nebo manipulovat s jednotlivými částmi.
Vzor konverze šarže
Při zpracování adresáře souborů, obalenou každou konverzi do try/catch tak, aby jeden zkažený soubor nebránil celé šarže.
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');
Výše uvedený vzor čte každé podporované rozšíření souboru z vstupního adresáře, konvertuje do GLB a zaznamenává veškeré selhání bez zastavení smyčky. Vrátěné pole ConversionResult objekty mohou být použity pro hlášení nebo logiku opětovného zkoušení.
Závěr:
@aspose/3d pokrývají celý rozsah potřeb konverze formátu v aplikaci Node.js TypeScript s konzistentním dvoustupňovým API: scene.open() na nakládku, scene.save() Klíčové omezení, které je třeba si pamatovat, je to, že existují třídy FBX importér a exportér ale automatická detekce formátu ještě není připojená, takže soubory FBx nemohou být načteny prostřednictvím scene.open().
Podrobnější informace o: Scene, Node,a) Mesh třídy použité v těchto příkladech, viz odkazy na třídu v této dokumentaci.