Kaip konvertuoti 3D modelius naudojant TypeScript

Kaip konvertuoti 3D modelius naudojant TypeScript

Aspose.3D FOSS for TypeScript konvertuoja tarp 3D formatų įkeliant į neutralų Scene atvaizdavimą ir išsaugant į tikslinį formatą. Ši vadovas rodo dažniausiai pasitaikančias konversijas.

Žingsnis po žingsnio vadovas

1 žingsnis: Įdiekite @aspose/3d

npm install @aspose/3d

2 žingsnis: Įkelti šaltinio failą

Sukurkite Scene ir iškvieskite scene.open(). Naudokite formatui specifinę *LoadOptions klasę, kad gautumėte geriausius rezultatus.

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);

Žingsnis 3: Išsaugoti į tikslinį formatą

Iškvieskite scene.save() su išvesties keliu. Išvesties formatas nustatomas pagal failo plėtinį.

// OBJ → glTF binary (GLB)
scene.save('output.glb');

// OBJ → STL
scene.save('output.stl');

// OBJ → COLLADA
scene.save('output.dae');

Pastaba: FBX nėra palaikomas scene.save() automatinio aptikimo. .fbx plėtinys nėra susietas su jokia eksportavimo priemone — įrašant į .fbx tyliai rašomas OBJ-format turinys. Naudokite OBJ, glTF, STL, 3MF arba COLLADA patikimam išvedimui.


Žingsnis 4: Dažni konvertavimo pavyzdžiai

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 — Nėra palaikoma

FBX automatinis aptikimas nėra įjungtas scene.open(). .fbx failas, perduotas scene.open(), nėra atpažįstamas jokio formato detektoriaus ir patenka į STL analizatorių, kuris sugrius arba sukurs šiukšles. FBX importavimo/eksportavimo klasės bibliotekoje egzistuoja, tačiau jos reikalauja tiesioginio iškvietimo, o ne aukšto lygio open()/save() API. Naudokite COLLADA, OBJ arba glTF kaip FBX alternatyvą.

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');

Žingsnis 5: Masinis kelių failų konvertavimas

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}`);
}

Palaikoma konvertavimo matrica

Iš \ ĮglTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX nėra palaikomas per aukšto lygio open()/save() API — formatas nėra įtrauktas į automatinį aptikimą. Visos aukščiau pateiktos FBX ląstelės yra ✗.


Dažnos problemos ir sprendimai

Po konvertavimo medžiagos prarandamos

OBJ medžiagos (usemtl, .mtl failas) įkeliamas, kai ObjLoadOptions.enableMaterials = true. Išsaugant į glTF, PBR medžiagų savybės automatiškai susiejamos. Sudėtingos medžiagos (procedūrinės, daugiapakopės) gali būti konvertuojamos su sumažintu tikslumu.

Tinklas rodomas neteisingu masteliu

Skirtingi formatai naudoja skirtingus numatytuosius matavimo vienetus (milimetrus STL, metrus glTF). Naudokite ObjLoadOptions.scale įkeliant arba StlSaveOptions.scaleFactor išsaugant, kad normalizuotumėte vienetus.

Koordinačių sistemos nesutapimas (modelis apverstas arba pasuktas)

Kai kurie formatai naudoja dešinės rankos Y‑aukštyn, kiti – Z‑aukštyn. Naudokite ObjLoadOptions.flipCoordinateSystem = true arba pritaikykite sukimosi transformaciją šakniniam mazgui po įkėlimo.


Dažnai užduodami klausimai

Ar konvertavimas išsaugo animacijas?

Animacijos duomenys išsaugomi konvertuojant tarp formatų, kurie juos palaiko (pvz., COLLADA → glTF). STL ir OBJ neperduoda animacijos duomenų. FBX nėra palaikomas per scene.open()/scene.save(), todėl FBX animacijos pakartotiniai perdavimai nėra prieinami per aukšto lygio API.

Ar tekstūros duomenys išsaugomi?

Tekstūros, į kurių OBJ medžiagas nuorodojamos arba įgludintos į glTF, yra perduodamos į scenos grafą. Išsaugant į GLB (binaryMode = true), dvejetainis buferis įterpiamas į vieną failą. OBJ išvestyje tekstūros išsaugomos kaip atskiri failai šalia .obj.

Ar galiu konvertuoti daug failų lygiagrečiai?

scene.open() ir scene.save() yra sinchroniniai. Naudokite Node.js worker_threads lygiagrečiam apdorojimui.


Žr. taip pat

 Lietuvių