Kuinka muuntaa 3D‑mallit TypeScriptissä

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/3d

Vaihe 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 annettu scene.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 tason open()/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 \ KohdeglTF/GLBOBJSTLFBX3MFCOLLADA
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.


Katso myös

 Suomi