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.
U skladu s člankom 1. @aspose/3d paket (v24.12.0, MIT licenca) pruža API-u TypeScript-a za čitanje i pisanje svih glavnih 3D formata u Node.js. Ovaj vodič prolazi kroz najčešće tokove radnog prijelaza.
Instalacija
npm install @aspose/3d
Zahtjevi: Node.js 18, 20 ili 22; TypeScript 5.0 ili noviji. Jedina ovisnost o vrijeme pokretanja je xmldom.
Podržani formati
U sljedećoj tablici navedeni su formati obuhvaćeni ovim vodičem i njihova podrška za čitanje/pisanje.
| Format: | Proračunska sredstva | Čitaj. | Pišite. | Upis: |
|---|---|---|---|---|
| OBJ | .obj | - Da, u redu. | - Da, u redu. | Čita/piše .mtl materijalni dosje |
| GTF-a | .gltf, .glb | - Da, u redu. | - Da, u redu. | .gltf je JSON format; .glb je samostalna binarna |
| STL | .stl | - Da, u redu. | - Da, u redu. | Standardni format 3D tiskanja; binarni i ASCII |
| 3MF | .3mf | - Da, u redu. | - Da, u redu. | Ugrađivanje i proizvodnja u obliku s bogatim metapodatcima |
| FBX | .fbx | Ne* | Ne* | Uvoznik/izvoznik postoji, ali automatsko otkrivanje formata nije vezano; ne može se koristiti putem: scene.open() |
| COLLADA | .dae | - Da, u redu. | - Da, u redu. | XML-bazirani format razmjene podataka |
OBJ podržava i uvoz i izvoz. scene.open() i sačuvaj s… scene.save('output.obj'), ili pretvoriti u bilo koji drugi podržani format kao što su glTF, STL ili 3MF.
U slučaju da je to moguće, odredi se:
Konverzija OBJ-a u binarni glTF (GLB) najčešći je radni tok na webu. GLB je samostalni binarski paket: teksture, geometriju i metapodatke u jednoj datoteki, što ga čini učinkovitim za isporuku HTTP-ja i direktno učitavanje Three.js, Babylon. js i modela-viewerom .
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 izvodi iz proširenja datoteke. .glb za binarne GLB-ove ili .gltf za zasebni JSON + .bin raspored.
U slučaju da je to moguće, potrebno je provesti postupke za utvrđivanje i preispitivanje.
STL je lingua franca za FDM i SLA 3D tiskanje. Prusalizer, Bambu Studio i Chitubox prihvaćaju STl. Pretvaranje od OBJ-a u ST L jednostavno je jer oba formata pohranjuju trokutne 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 pohranjuje podatke o boji, materijalu ili UV datoteke. Ako vaša OBJ datotekama koristi grupe materijala, te informacije se odbacuju tijekom izvoza. Za oblike štampe koje čuvaju boje, zamijeni to 3MF (vidjeti ispod).
STL na glTF (Scanner i CAD na Web)
Structured-light skener i parametrični CAD izvoznici obično izlaze STL. Konverzija na glTF čini geometriju dostupnom u web zasnovanim preglednicima i AR platformama bez koraka renderinga s strane poslužitelja.
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');
Budući da STL ne nosi nikakve informacije o materijalu ili teksturi, rezultirajuća glTF datoteka sadrži samo geometriju. Možete programski priključiti materiale na čvorove scene nakon učitavanja ako je potrebno.
3MF to glTF (Manufacturing to Visualization)
3D format proizvodnje (3MF) sve se više koristi u aditivnim proizvodnim tokovima rada jer čuva boje, materijale, stabla komponenti i metapodatke za tisak uz geometriju. Konverzija 3MFA na glTF omogućuje vizualizaciju nizvodno u web alatima dok sačuva strukturu 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() Održava hijerarhiju komponenti u scene.rootNode.childNodes, tako da možete pregledati ili manipulirati pojedinačnim dijelovima prije čuvanja.
Uzorak pretvaranja serije
Prilikom obrade direktorij datoteka, zavojiti svaku konverziju u try/catch tako da jedna pokvarena datoteka ne može prekinuti cijelu 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');
Gornji uzorak čita svaku podržanu proširenje datoteke iz ulaznog direktorija, pretvara u GLB i beleži sve neuspjehe bez zaustavljanja petlje. Vratljeni niz ConversionResult objekte se mogu koristiti za izvješćivanje ili ponovno ispitivanje logike.
Izvješće
@aspose/3d U ovom slučaju, u skladu s člankom 4. stavkom 1. točkom (a) i podstavkom 2. točkama 3. i 5. ovog članka, se primjenjuje sljedeća opcija: scene.open() za utovar, scene.save() Glavna ograničenja za zapamtiti je da FBX uvoznik i izvoznik klase postoje, ali format auto-detekcija nije još žica, tako da se FBx datoteke ne mogu učitati putem scene.open().
Za više detalja o: Scene, Node, i Mesh U ovom dokumentu se navode referentne stranice za klase.