Jak převést 3D modely v TypeScript
Aspose.3D FOSS for TypeScript převádí mezi 3D formáty načtením do neutrální Scene reprezentace a uložením do cílového formátu. Tento průvodce ukazuje nejčastější konverze.
Průvodce krok za krokem
Krok 1: Nainstalujte @aspose/3d
npm install @aspose/3dKrok 2: Načíst zdrojový soubor
Vytvořte Scene a zavolejte scene.open(). Pro nejlepší výsledky použijte formátově specifickou třídu *LoadOptions.
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);Krok 3: Uložit do cílového formátu
Zavolejte scene.save() s výstupní cestou. Výstupní formát je detekován z přípony souboru.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Poznámka: FBX není podporováno automatickým rozpoznáním
scene.save(). Rozšíření.fbxnení napojeno na žádný exportér — ukládání do.fbxtiše zapisuje obsah ve formátu OBJ. Použijte OBJ, glTF, STL, 3MF nebo COLLADA pro spolehlivý výstup.
Krok 4: Běžné příklady konverzí
OBJ do 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 — Není podporováno
Detekce FBX není zapojena v
scene.open(). Soubor.fbxpředaný doscene.open()není rozpoznán žádným detektorem formátu a přejde na parser STL, který selže nebo vytvoří odpad. Třídy importéru/exportéru FBX existují v knihovně, ale vyžadují přímé volání místo vysoceúrovňového APIopen()/save(). Použijte COLLADA, OBJ nebo glTF jako alternativu k FBX.
glTF na STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA na 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Krok 5: Hromadná konverze více souborů
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}`);
}Podporovaná konverzní matice
| Z \ Do | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX není podporován prostřednictvím vysoké úrovně open()/save() API — formát není zapojen do automatického rozpoznávání. Všechny výše uvedené buňky FBX jsou ✗.
Časté problémy a opravy
Materiály se po konverzi ztratí
Materiály OBJ (usemtl, .mtl soubor) jsou načteny, když ObjLoadOptions.enableMaterials = true. Při ukládání do glTF jsou vlastnosti materiálu PBR automaticky mapovány. Složené materiály (procedurální, vícevrstvé) se mohou převést se sníženou věrností.
Síť je nesprávně škálována
Různé formáty používají různé výchozí jednotky (milimetry pro STL, metry pro glTF). Použijte ObjLoadOptions.scale při načítání nebo StlSaveOptions.scaleFactor při ukládání k normalizaci jednotek.
Neshoda souřadnicových systémů (model převrácený nebo otočený)
Některé formáty používají pravou ruku Y‑nahoru, jiné Z‑nahoru. Použijte ObjLoadOptions.flipCoordinateSystem = true nebo po načtení aplikujte rotaci na kořenový uzel.
Často kladené otázky
Zachovává převod animace?
Data animace jsou zachována při převodu mezi formáty, které je podporují (např. COLLADA → glTF). STL a OBJ nepřenášejí data animace. FBX není podporováno prostřednictvím scene.open()/scene.save(), takže zpětné převody animace FBX nejsou k dispozici prostřednictvím vysoké úrovně API.
Jsou data textury zachována?
Textury odkazované materiály OBJ nebo vložené v glTF jsou přeneseny do grafu scény. Při ukládání do GLB (binaryMode = true) je binární buffer vložen do jediného souboru. Pro výstup OBJ jsou textury uloženy jako samostatné soubory vedle .obj.
Mohu převádět více souborů najednou?
scene.open() a scene.save() jsou synchronní. Použijte Node.js worker_threads pro paralelní zpracování.