Jak konwertować modele 3D w TypeScript

Jak konwertować modele 3D w TypeScript

Aspose.3D FOSS for TypeScript konwertuje pomiędzy formatami 3D, ładując je do neutralnej Scene reprezentacji i zapisując do formatu docelowego. Ten przewodnik pokazuje najczęstsze konwersje.

Przewodnik krok po kroku

Krok 1: Zainstaluj @aspose/3d

npm install @aspose/3d

Krok 2: Załaduj plik źródłowy

Utwórz Scene i wywołaj scene.open(). Użyj klasy specyficznej dla formatu *LoadOptions, aby uzyskać najlepsze wyniki.

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: Zapisz w formacie docelowym

Wywołaj scene.save() z ścieżką wyjściową. Format wyjściowy jest wykrywany na podstawie rozszerzenia pliku.

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

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

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

Uwaga: FBX jest nieobsługiwany przez scene.save() automatyczne wykrywanie. Rozszerzenie .fbx nie jest podłączone do żadnego eksportera — zapisywanie do .fbx cicho zapisuje zawartość w formacie OBJ. Użyj OBJ, glTF, STL, 3MF lub COLLADA dla niezawodnego wyjścia.


Krok 4: Przykłady typowych konwersji

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 — Nieobsługiwane

Automatyczne wykrywanie FBX nie jest podłączone w scene.open(). Plik .fbx przekazany do scene.open() nie jest rozpoznawany przez żaden detektor formatu i przechodzi do parsera STL, który zakończy się niepowodzeniem lub wygeneruje śmieci. Klasy importera/eksportera FBX istnieją w bibliotece, ale wymagają bezpośredniego wywołania, a nie wysokopoziomowego API open()/save(). Użyj COLLADA, OBJ lub glTF jako alternatywy dla FBX.

glTF do STL

import { Scene } from '@aspose/3d';

const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');

COLLADA do 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: Konwersja wsadowa wielu plików

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

Obsługiwana macierz konwersji

Z \ DoglTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX nie jest obsługiwany przez wysokopoziomowe open()/save() API — format nie jest podłączony do automatycznego wykrywania. Wszystkie powyższe komórki FBX mają znak ✗.


Typowe problemy i rozwiązania

Materiały są tracone po konwersji

Materiały OBJ (usemtl, .mtl plik) są ładowane, gdy ObjLoadOptions.enableMaterials = true. Podczas zapisywania do glTF, właściwości materiałów PBR są mapowane automatycznie. Złożone materiały (proceduralne, wielowarstwowe) mogą być konwertowane z obniżoną wiernością.

Siatka jest skalowana niepoprawnie

Różne formaty używają różnych domyślnych jednostek (milimetry dla STL, metry dla glTF). Użyj ObjLoadOptions.scale przy ładowaniu lub StlSaveOptions.scaleFactor przy zapisywaniu, aby znormalizować jednostki.

Niezgodność systemu współrzędnych (model odwrócony lub obrócony)

Niektóre formaty używają układu Y‑up po prawej stronie, inne Z‑up. Użyj ObjLoadOptions.flipCoordinateSystem = true lub zastosuj obrót węzła głównego po załadowaniu.


Najczęściej zadawane pytania

Czy konwersja zachowuje animacje?

Dane animacji są zachowywane przy konwertowaniu między formatami, które je obsługują (np. COLLADA → glTF). STL i OBJ nie zawierają danych animacji. FBX nie jest obsługiwany za pośrednictwem scene.open()/scene.save(), więc obiegi animacji FBX nie są dostępne w wysokopoziomowym API.

Czy dane tekstury są zachowane?

Tekstury odwoływane przez materiały OBJ lub osadzone w glTF są przenoszone do grafu sceny. Podczas zapisywania do GLB (binaryMode = true) bufor binarny jest osadzony w jednym pliku. Dla wyjścia OBJ tekstury są zapisywane jako osobne pliki obok .obj.

Czy mogę konwertować wiele plików jednocześnie?

scene.open() i scene.save() są synchroniczne. Użyj Node.js worker_threads do przetwarzania równoległego.


Zobacz także

 Polski