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/3d2 ž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..fbxplėtinys nėra susietas su jokia eksportavimo priemone — įrašant į.fbxtyliai 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()..fbxfailas, perduotasscene.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 lygioopen()/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/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| 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.