Як конвертувати 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‑up, інші — Z‑up. Використовуйте 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 для паралельної обробки.