Как сохранять 3D‑модели в TypeScript

Как сохранять 3D‑модели в TypeScript

Aspose.3D FOSS для TypeScript сохраняет сцены во все поддерживаемые форматы одним scene.save() вызовом. Формат вывода определяется автоматически по расширению файла. Это руководство охватывает сохранение в каждый формат и использование специфических для формата параметров.

Пошаговое руководство

Шаг 1: Установите @aspose/3d

npm install @aspose/3d

Шаг 2: Загрузить или создать сцену

Либо загрузите существующий файл, либо программно построьте сцену перед сохранением.

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

// Load from file
const scene = new Scene();
scene.open('source.obj', new ObjLoadOptions());

// Or create a new empty scene
const emptyScene = new Scene();

Шаг 3: Сохранить с автоматически определённым форматом

scene.save(path) определяет формат вывода по расширению файла:

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

const scene = new Scene();
scene.open('input.obj', new ObjLoadOptions());

// Save as binary glTF
scene.save('output.glb');

// Save as JSON glTF
scene.save('output.gltf');

// Save as STL
scene.save('output.stl');

// Save as OBJ
scene.save('output.obj');

// Save as FBX
scene.save('output.fbx');

// Save as 3MF
scene.save('output.3mf');

// Save as COLLADA
scene.save('output.dae');

Шаг 4: Использовать параметры SaveOptions, специфичные для формата

Для более точного контроля передайте объект параметров, специфичный для формата:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';

const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());

// Export to GLB with specific options
const saveOptions = new GltfSaveOptions();
saveOptions.binaryMode = true;   // produce GLB (binary glTF)

scene.save('output.glb', saveOptions);

Шаг 5: Сохранить в буфер (в памяти)

Используйте scene.saveToBuffer() чтобы получить вывод в виде Buffer без записи на диск:

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

const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());

const buffer = scene.saveToBuffer('output.glb');
console.log(`Buffer size: ${buffer.length} bytes`);

// Send via HTTP, upload to S3, etc.

Шаг 6: Проверить результат

После сохранения проверьте, что файл существует и имеет ненулевой размер:

import * as fs from 'fs';

const stats = fs.statSync('output.glb');
console.log(`Saved output.glb: ${stats.size} bytes`);

Матрица поддержки форматов

РасширениеФорматЗаметки
.glbglTF 2.0 BinaryРекомендуется для glTF; все ресурсы встроены в один файл
.gltfglTF 2.0 JSONОтдельный .bin и файлы текстур рядом с JSON
.objWavefront OBJЗаписывает .mtl файл материала рядом .obj при наличии материалов
.stlSTLПо умолчанию: бинарный STL; использовать StlSaveOptions.ascii = true для текста
.fbxAutodesk FBXБинарный формат FBX
.3mf3D ManufacturingПодходит для рабочих процессов 3D‑печати
.daeCOLLADAФормат обмена на основе XML

Распространённые проблемы и их решения

Error: Unsupported format при сохранении

Убедитесь, что расширение файла соответствует поддерживаемому формату. Библиотека использует расширение для определения формата; файл с именем output.xyz не будет работать.

.obj файл сохраняется, но материалы отсутствуют

При сохранении OBJ библиотека материалов (.mtl) записывается автоматически рядом с .obj. Оба файла должны находиться в одном каталоге при повторном открытии. Если вам нужны только геометрия, установите ObjSaveOptions.enableMaterials = false.

Large .gltf с отдельными текстурами

Используйте .glb вместо .gltf; он упаковывает бинарные данные в один автономный файл. Установите GltfSaveOptions.binaryMode = true при передаче GltfSaveOptions экземпляра.


Часто задаваемые вопросы

Могу ли я сохранить в несколько форматов за один запуск?

Да; вызовите scene.save() многократно с разными путями:

scene.save('output.glb');
scene.save('output.stl');
scene.save('output.obj');

Изменяет ли сохранение сцену?

Нет. scene.save() является операцией только для чтения над графом сцены. Вы можете сохранить одну и ту же сцену в нескольких форматах без каких-либо побочных эффектов.

Могу ли я перезаписать исходный файл?

Да. Передайте тот же путь в scene.save() который вы использовали в scene.open(). Библиотека записывает в буфер, а затем записывает на диск.


См. также

 Русский