Node.js‑kehittäjät, jotka työskentelevät 3D-sisällön parissa, tarvitsevat usein muuntaa formaattien välillä: suunnittelutyökalu vie OBJ‑muotoon, web‑renderöijä odottaa GLB:tä, 3D‑tulostin vaatii STL:n ja valmistusputki käyttää 3MF:tä. Näiden muunnosten käsitteleminen yhdellä, yhtenäisellä API:lla vähentää ulkoisten työkalujen määrää putkessa ja pitää muunnoslogiikan sovelluskoodin sisällä, missä se voidaan testata ja versioida.
Se @aspose/3d paketti (v24.12.0, MIT-lisenssi) tarjoaa TypeScript‑ensimmäisen API:n kaikkien tärkeimpien 3D-muotojen lukemiseen ja kirjoittamiseen Node.js:ssä. Tämä opas käy läpi yleisimmät muunnostyövirrat.
Asennus
npm install @aspose/3d
Vaatimukset: Node.js 18, 20 tai 22; TypeScript 5.0 tai uudempi. Ainoa ajonaikainen riippuvuus on xmldom.
Tuetut formaatit
Alla oleva taulukko luettelee oppaassa käsitellyt formaatit ja niiden luku-/kirjoitustuen.
| Muoto | Tiedostopääte | Luku | Kirjoitus | Huomautukset |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Kyllä | Ei | Vain tuonti; lukee .mtl materiaalitiedostot |
| glTF 2.0 (JSON) | .gltf | Kyllä | Kyllä | Standardi verkkotoimitusmuoto |
| glTF 2.0 (Binaari) | .glb | Kyllä | Kyllä | Itse sisältävä, verkossa suositeltu |
| STL (ASCII/Binary) | .stl | Kyllä | Kyllä | Standardi 3D-tulostusformaatti |
| 3MF | .3mf | Kyllä | Kyllä | Valmistusformaatti, jossa on runsaasti metadataa |
| FBX | .fbx | Ei* | Ei* | Tuonti-/vienti-työkalu on olemassa, mutta formaatin automaattinen tunnistus ei ole kytketty; ei käytettävissä kautta scene.open() |
| COLLADA | .dae | Kyllä | Kyllä | XML-pohjainen vaihtomuoto |
Huomautus: OBJ on vain tuonti (canExport: false). Muuntaaksesi OBJ-sisällön toiseen muotoon, lataa se scene.open() ja tallenna tuettuun vientimuotoon, kuten glTF, STL tai 3MF.
OBJ → GLB (Web‑toimitus)
OBJ:n muuntaminen binaariksi glTF:ksi (GLB) on yleisin web‑työnkulku. GLB on itsenäinen binaarinen paketti: tekstuurit, geometria ja metatiedot yhdessä tiedostossa, mikä tekee siitä tehokkaan HTTP‑toimitukseen ja suoraan Three.js:n, Babylon.js:n ja model-viewer:n lataamiseen.
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');
Tulostusmuoto päätellään tiedostopäätteestä. Käytä .glb binääriseen GLB:hen tai .gltf erillistä JSONia varten + .bin asettelu.
OBJ → STL: Mallin valmistelu 3D-tulostusta varten
STL on FDM- ja SLA‑3D‑tulostuksen lingua franca. Leikkausohjelmat kuten PrusaSlicer, Bambu Studio ja Chitubox hyväksyvät kaikki STL:n. OBJ:n muuntaminen STL:ksi on suoraviivaista, koska molemmat formaatit tallentavat kolmioverkot.
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 ei tallenna väriä, materiaalia tai UV‑tietoja. Jos OBJ‑tiedostosi käyttää materiaaliryhmiä, nämä tiedot poistetaan viennissä. Väriä säilyttäviä tulostusformaatteja ajatellen harkitse sen sijaan 3MF:tä (katso alapuolelta).
STL → glTF: Skannerin tai CAD‑tulosteen siirto verkkoon
Rakennevaloa käyttävät skannerit ja parametriset CAD‑vientiohjelmat tuottavat yleisesti STL:n. Muuntaminen glTF:ksi tekee geometriasta helposti saavutettavan web‑pohjaisissa katseluohjelmissa ja AR‑alustoilla ilman palvelinpuolen renderöintivaihetta.
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');
Koska STL ei sisällä materiaali- tai tekstuuritietoja, tuloksena oleva glTF-tiedosto sisältää vain geometriaa. Voit liittää materiaaleja ohjelmallisesti kohtaussolmuihin latauksen jälkeen tarvittaessa.
3MF to glTF (Manufacturing to Visualization)
3D Manufacturing Format (3MF) on yhä useammin käytössä lisävalmistusprosessien työnkuluissa, koska se tallentaa värit, materiaalit, komponenttipuut ja tulostusmetatiedot yhdessä geometrian kanssa. 3MF:n muuntaminen glTF-muotoon mahdollistaa jatkokehityksen visualisoinnin verkkotyökaluissa säilyttäen kohtauksen rakenteen.
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() säilyttää komponenttihierarkian kohteessa scene.rootNode.childNodes, jotta voit tarkastella tai muokata yksittäisiä osia ennen tallentamista.
Erämuunnoksen malli
Kun käsitellään tiedostokansiota, kääri jokainen muunnos try/catch jotta yksi vioittunut tiedosto ei keskeytä koko erää.
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');
Yllä oleva malli lukee kunkin tuetun tiedostopäätteen syötekansiosta, muuntaa GLB-muotoon ja kirjaa kaikki epäonnistumiset pysäyttämättä silmukkaa. Palautettu taulukko of ConversionResult objekteja voidaan käyttää raportointiin tai uudelleenyrittämislogiikkaan.
Päätelmä
@aspose/3d kattaa koko valikoiman formaattimuunnostarpeita Node.js TypeScript -sovelluksessa, jossa on johdonmukainen kaksivaiheinen API: scene.open() lataamiseen, scene.save() kirjoittamiseen. Keskeinen rajoitus, joka on muistettava, on että FBX-tuonti- ja vientiluokat ovat olemassa, mutta formaatin automaattinen tunnistus ei ole vielä kytketty, joten FBX-tiedostoja ei voida ladata via scene.open().
Lisätietoja Scene, Node, ja Mesh luokista, joita näissä esimerkeissä käytetään, katso luokkiin viittaavat sivut tässä dokumentaatiossa.