Node.js programeri koji rade sa 3D sadržajem često moraju da konvertuju između formata: alat za dizajn izvozi OBJ, web rendereri očekuju GLB, 3D štampač zahteva STL, a proizvodna linija koristi 3MF. Obrada ovih konverzija pomoću jedinstvenog, doslednog API‑ja smanjuje broj eksternih alata u pipeline‑u i čuva logiku konverzije unutar koda aplikacije gde se može testirati i verzionisati.
The @aspose/3d paket (v24.12.0, MIT licenca) pruža TypeScript‑first API za čitanje i pisanje svih glavnih 3D formata u Node.js. Ovaj vodič prolazi kroz najčešće radne tokove konverzije.
Instalacija
npm install @aspose/3d
Zahtevi: Node.js 18, 20 ili 22; TypeScript 5.0 ili noviji. Jedina runtime zavisnost je xmldom.
Podržani formati
Tabela ispod navodi formate obuhvaćene u ovom vodiču i njihovu podršku za čitanje/pisanje.
| Format | Ekstenzija | Čitaj | Molim vas | Napomene |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Da | Ne | Samo uvoz; čita .mtl datoteke materijala |
| glTF 2.0 (JSON) | .gltf | Da | Da | Standardni format za isporuku na webu |
| glTF 2.0 (binarni) | .glb | Da | Da | Samostalno, preporučeno za web |
| STL (ASCII/Binarni) | .stl | Da | Da | Standardni format za 3D štampu |
| 3MF | .3mf | Da | Da | Proizvodni format sa bogatim metapodacima |
| FBX | .fbx | Ne* | Ne* | Postoji uvoz/izvoz, ali automatsko otkrivanje formata nije povezano; nije upotrebljivo putem scene.open() |
| COLLADA | .dae | Da | Da | XML‑bazirani format razmene |
Napomena: OBJ je samo za uvoz (canExport: false). Da biste konvertovali OBJ sadržaj u drugi format, učitajte ga pomoću scene.open() i sačuvajte u podržanom formatu za izvoz, kao što su glTF, STL ili 3MF.
OBJ u GLB (Web isporuka)
Konvertovanje OBJ u binarni glTF (GLB) je najčešći web radni tok. GLB je samostalni binarni paket: teksture, geometrija i metapodaci u jednom fajlu, što ga čini efikasnim za HTTP isporuku i direktno učitavanje od strane Three.js, Babylon.js i model-viewer‑a.
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');
Izlazni format se zaključuje iz ekstenzije fajla. Koristite .glb za binarni GLB ili .gltf za odvojeni JSON + .bin raspored.
OBJ u STL: Priprema modela za 3D štampu
STL je lingua franca FDM i SLA 3D štampe. Slicer‑i poput PrusaSlicer, Bambu Studio i Chitubox prihvataju STL. Konvertovanje iz OBJ u STL je jednostavno jer oba formata čuvaju trouglaste mreže.
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 ne čuva boju, materijal ili UV podatke. Ako vaš OBJ fajl koristi grupe materijala, te informacije se gube prilikom izvoza. Za formate štampe koji očuvavaju boju, razmotrite 3MF (vidi ispod).
STL u glTF: Sa skenera ili CAD izlaza na web
Skeneri sa strukturiranim svetlom i parametarski CAD eksporteri najčešće proizvode STL. Konvertovanje u glTF čini geometriju dostupnom u web‑baziranim preglednicima i AR platformama bez koraka renderovanja na 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');
Pošto STL ne sadrži informacije o materijalu ili teksturi, rezultatni glTF fajl će sadržati samo geometriju. Možete programatski prikačiti materijale čvorovima scene nakon učitavanja, ako je potrebno.
3MF to glTF (Manufacturing to Visualization)
3D Manufacturing Format (3MF) sve se više koristi u radnim tokovima aditivne proizvodnje jer čuva boju, materijale, hijerarhiju komponenti i metapodatke štampe uz geometriju. Konvertovanje 3MF u glTF omogućava naknadnu vizualizaciju u web alatima uz očuvanje strukture scene.
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() čuva hijerarhiju komponenti u scene.rootNode.childNodes, tako da možete pregledati ili manipulisati pojedinačnim delovima pre nego što ih sačuvate.
Grupna konverzija
Kada obrađujete direktorijum fajlova, umotajte svaku konverziju u try/catch tako da jedan oštećen fajl ne prekine celu seriju.
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');
Šablon iznad čita svaku podržanu ekstenziju fajla iz ulaznog direktorijuma, konvertuje u GLB i beleži sve greške bez zaustavljanja petlje. Vraćeni niz ConversionResult objekata može se koristiti za izveštavanje ili logiku ponovnog pokušaja.
Zaključak
@aspose/3d pokriva kompletan spektar potreba za konverzijom formata u Node.js TypeScript aplikaciji sa doslednim dvo‑korakom API‑ja: scene.open() za učitavanje, scene.save() za pisanje. scene.open().
Za više detalja o Scene, Node, i Mesh klasama korišćenim u ovim primerima, pogledajte stranice referenci klasa u ovoj dokumentaciji.