Как да запазим 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 БинаренПрепоръчва се за glTF; всички активи са вградени в един файл
.gltfglTF 2.0 JSONОтделен .bin и файлове с текстури заедно с JSON
.objWavefront OBJЗаписва .mtl файл с материалите до .obj когато има материали
.stlSTLПо подразбиране: бинарен STL; използвайте StlSaveOptions.ascii = true за текст
.fbxAutodesk FBXБинарен FBX формат
.3mf3D ManufacturingПодходящо за работни процеси на 3D печат
.daeCOLLADAXML-базиран формат за обмен

Чести проблеми и решения

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


Вижте също

 Български