Как сохранять 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`);Матрица поддержки форматов
| Расширение | Формат | Заметки |
|---|---|---|
.glb | glTF 2.0 Binary | Рекомендуется для glTF; все ресурсы встроены в один файл |
.gltf | glTF 2.0 JSON | Отдельный .bin и файлы текстур рядом с JSON |
.obj | Wavefront OBJ | Записывает .mtl файл материала рядом .obj при наличии материалов |
.stl | STL | По умолчанию: бинарный STL; использовать StlSaveOptions.ascii = true для текста |
.fbx | Autodesk FBX | Бинарный формат FBX |
.3mf | 3D Manufacturing | Подходит для рабочих процессов 3D‑печати |
.dae | COLLADA | Формат обмена на основе 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(). Библиотека записывает в буфер, а затем записывает на диск.