Как да конвертирате 3D модели в TypeScript

Как да конвертирате 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 съществуват в библиотеката, но изискват директно извикване, а не чрез високото ниво на API open()/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/GLBOBJSTLFBX3MFCOLLADA
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 за паралелна обработка.


Вижте още

 Български