Kuinka muuntaa 3D‑mallit TypeScriptissä
Aspose.3D FOSS for TypeScript muuntaa 3D-muotojen välillä lataamalla neutraaliin Scene-esitykseen ja tallentamalla kohdemuotoon. Tämä opas näyttää yleisimmät muunnokset.
Vaiheittainen opas
Vaihe 1: Asenna @aspose/3d
npm install @aspose/3dVaihe 2: Lataa lähdetiedosto
Luo Scene ja kutsu scene.open(). Käytä formaattiin spesifistä *LoadOptions luokkaa parhaan tuloksen saavuttamiseksi.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);Vaihe 3: Tallenna kohdeformaattiin
Kutsu scene.save() ulostulopolun kanssa. Ulostulomuoto tunnistetaan tiedostopäätteestä.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Huomautus: FBX ei ole tuettu
scene.save()automaattitunnistuksessa..fbx-laajennusta ei ole kytketty mihinkään vientitoimintoon — tallentaminen.fbx:iin kirjoittaa hiljaisesti OBJ-muotoista sisältöä sen sijaan. Käytä OBJ, glTF, STL, 3MF tai COLLADA luotettavan tulosteen saamiseksi.
Vaihe 4: Yleisiä muunnosesimerkkejä
OBJ → glTF / GLB
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
scene.save('model.glb');
console.log('Converted OBJ → GLB');FBX — Ei tuettu
FBX-autotunnistusta ei ole kytketty
scene.open()..fbx-tiedostoa, joka on annettuscene.open():lle, ei tunnista mikään formaattitunnistin, ja se ohjautuu STL-jäsentimeen, joka joko epäonnistuu tai tuottaa roskaa. FBX-tuonti-/vienti-luokkia on kirjastossa, mutta ne vaativat suoraa kutsua korkean tasonopen()/save()-rajapinnan sijaan. Käytä COLLADAa, OBJ:ta tai glTF:ta FBX:n vaihtoehtona.
glTF → STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA → 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Vaihe 5: Erämuunna useita tiedostoja
import * as fs from 'fs';
import * as path from 'path';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const inputDir = './input';
const outputDir = './output';
fs.mkdirSync(outputDir, { recursive: true });
const objFiles = fs.readdirSync(inputDir).filter(f => f.endsWith('.obj'));
for (const file of objFiles) {
const inputPath = path.join(inputDir, file);
const outputFile = file.replace('.obj', '.glb');
const outputPath = path.join(outputDir, outputFile);
const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);
console.log(`Converted ${file} → ${outputFile}`);
}Tuettu muunnosmatriisi
| Lähde \ Kohde | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX ei ole tuettu korkean tason open()/save() API:n kautta — formaattia ei ole kytketty automaattiseen tunnistukseen. Kaikki yllä olevat FBX-solut ovat ✗.
Yleisiä ongelmia ja korjauksia
Materiaalit katoavat muunnoksen jälkeen
OBJ-materiaalit (usemtl, .mtl tiedosto) ladataan, kun ObjLoadOptions.enableMaterials = true. Kun tallennetaan glTF-muotoon, PBR-materiaalin ominaisuudet kartoitetaan automaattisesti. Monimutkaiset materiaalit (proceduraaliset, monikerroksiset) saattavat muuntua heikommalla tarkkuudella.
Verkko näyttää skaalautuneen väärin
Eri formaatit käyttävät eri oletusyksiköitä (millimetrit STL:ssä, metrit glTF:ssä). Käytä ObjLoadOptions.scale ladattaessa tai StlSaveOptions.scaleFactor tallennettaessa yksiköiden normalisoimiseksi.
Koordinaatistojärjestelmän epäsopivuus (malli käännetty tai kierritetty)
Jotkut formaatit käyttävät oikean käden Y‑up -suuntaa, toiset Z‑up -suuntaa. Käytä ObjLoadOptions.flipCoordinateSystem = true tai sovella kiertoa juurisolmuun latauksen jälkeen.
Usein kysytyt kysymykset
Säilyykö muunnos animaatiot?
Animaatiotiedot säilyvät, kun muunnetaan formaattien välillä, jotka tukevat sitä (esim. COLLADA → glTF). STL ja OBJ eivät sisällä animaatiotietoja. FBX ei ole tuettu scene.open()/scene.save() kautta, joten FBX‑animaation round‑trips -toimintoja ei ole saatavilla korkean tason API:n kautta.
Onko tekstuuritiedot säilytetty?
OBJ‑materiaaleihin viitatut tai glTF:ssä upotetut tekstuurit siirretään kohtausgraafiin. Kun tallennetaan GLB‑muotoon (binaryMode = true), binääripuskuri upotetaan yhteen tiedostoon. OBJ‑tulosteessa tekstuurit tallennetaan erillisinä tiedostoina .obj:n rinnalle.
Voinko muuntaa useita tiedostoja rinnakkain?
scene.open() ja scene.save() ovat synkronisia. Käytä Node.js worker_threads rinnakkaiseen käsittelyyn.