Как да конвертирате 3D модели в TypeScript
Aspose.3D FOSS for TypeScript преобразува между 3D формати, като ги зарежда в неутрално Scene представяне и ги записва в целевия формат. Това ръководство показва най-често срещаните конверсии.
Ръководство стъпка по стъпка
Стъпка 1: Инсталирайте @aspose/3d
npm install @aspose/3dСтъпка 2: Зареждане на изходния файл
Създайте Scene и извикайте scene.open(). Използвайте специфичния за формата клас *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);Стъпка 3: Записване в целевия формат
Извикайте scene.save() с пътя за изход. Форматът на изхода се определя от разширението на файла.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Забележка: FBX не се поддържа от
scene.save()автоматично откриване. Разширението.fbxне е свързано с никой експортер — запазването в.fbxтихо записва съдържание във формат OBJ вместо това. Използвайте OBJ, glTF, STL, 3MF или COLLADA за надежден изход.
Стъпка 4: Чести примери за конвертиране
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 — Не се поддържа
Автоматичното откриване на FBX не е включено в
scene.open(). Файл.fbx, предаден наscene.open(), не се разпознава от нито един детектор за формати и попада в парсера за STL, който ще се провали или ще произведе боклук. Класовете за импортиране/експортиране на FBX съществуват в библиотеката, но изискват директно извикване, а не чрез високото ниво на APIopen()/save(). Използвайте COLLADA, OBJ или glTF като алтернатива на FBX.
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');Стъпка 5: Масово конвертиране на множество файлове
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}`);
}Поддържана матрица за конвертиране
| От \ До | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX не се поддържа чрез високото ниво open()/save() API — форматът не е включен в автоматичното откриване. Всички FBX клетки по-горе са ✗.
Общи проблеми и решения
Материалите се губят след конверсия
OBJ материалите (usemtl, .mtl файл) се зареждат, когато ObjLoadOptions.enableMaterials = true. При запазване в glTF, свойствата на PBR материалите се картографират автоматично. Сложните материали (процедурни, многослойни) могат да се конвертират със намалена точност.
Мрежата се показва с неправилно мащабиране
Различните формати използват различни подразбиращи се единици (милиметри за STL, метри за glTF). Използвайте ObjLoadOptions.scale при зареждане или StlSaveOptions.scaleFactor при запазване, за да нормализирате единиците.
Несъответствие в координатната система (моделът е обърнат или завъртян)
Някои формати използват десен ръчен Y‑нагоре, други Z‑нагоре. Използвайте ObjLoadOptions.flipCoordinateSystem = true или приложете завъртане към кореновия възел след зареждане.
Често задавани въпроси
Запазва ли конверсията анимациите?
Анимационните данни се запазват при конвертиране между формати, които ги поддържат (например COLLADA → glTF). STL и OBJ не носят анимационни данни. FBX не се поддържа чрез scene.open()/scene.save(), така че обратните трансфери на анимация за FBX не са налични чрез високото ниво API.
Запазени ли са данните за текстура?
Текстурите, посочени в материалите на OBJ или вградени в glTF, се пренасят в графа на сцената. При запазване в GLB (binaryMode = true), бинарният буфер се вгражда в един файл. За изход в OBJ текстурите се запазват като отделни файлове заедно с .obj.
Мога ли да конвертирам много файлове паралелно?
scene.open() и scene.save() са синхронни. Използвайте Node.js worker_threads за паралелна обработка.