Как да запазим 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 Бинарен | Препоръчва се за 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.
Голям .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(). Библиотеката записва в буфер и след това записва на диска.