Cách Lưu Mô Hình 3D trong TypeScript

Cách Lưu Mô Hình 3D trong TypeScript

Aspose.3D FOSS cho TypeScript lưu các cảnh vào tất cả các định dạng được hỗ trợ chỉ với một scene.save() gọi. Định dạng đầu ra được phát hiện tự động từ phần mở rộng tệp. Hướng dẫn này đề cập đến việc lưu vào mỗi định dạng và sử dụng các tùy chọn riêng cho từng định dạng.

Hướng Dẫn Từng Bước

Bước 1: Cài đặt @aspose/3d

npm install @aspose/3d

Bước 2: Tải hoặc Xây dựng một Cảnh

Hoặc tải một tệp hiện có hoặc xây dựng một cảnh bằng cách lập trình trước khi lưu.

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();

Bước 3: Lưu với Định Dạng Được Tự Động Phát Hiện

scene.save(path) phát hiện định dạng đầu ra từ phần mở rộng tệp:

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');

Bước 4: Sử dụng SaveOptions Riêng Cho Định Dạng

Để kiểm soát chi tiết, truyền một đối tượng tùy chọn riêng cho định dạng:

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);

Bước 5: Lưu vào Buffer (Trong Bộ Nhớ)

Sử dụng scene.saveToBuffer() để nhận đầu ra dưới dạng một Buffer không ghi vào đĩa:

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.

Bước 6: Xác Minh Đầu Ra

Sau khi lưu, xác minh tệp tồn tại và có kích thước khác không:

import * as fs from 'fs';

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

Ma trận Hỗ trợ Định dạng

Phần mở rộngĐịnh dạngGhi chú
.glbglTF 2.0 BinaryĐược khuyến nghị cho glTF; tất cả tài nguyên được nhúng trong một tệp duy nhất
.gltfglTF 2.0 JSONRiêng .bin và các tệp texture kèm theo JSON
.objWavefront OBJGhi .mtl tệp vật liệu kèm theo .obj khi có vật liệu
.stlSTLMặc định: STL nhị phân; sử dụng StlSaveOptions.ascii = true cho văn bản
.fbxAutodesk FBXĐịnh dạng FBX nhị phân
.3mf3D ManufacturingPhù hợp cho quy trình in 3D
.daeCOLLADAĐịnh dạng trao đổi dựa trên XML

Các Vấn đề Thông thường và Cách Khắc phục

Error: Unsupported format khi lưu

Kiểm tra xem phần mở rộng tệp có khớp với định dạng được hỗ trợ hay không. Thư viện sử dụng phần mở rộng để phát hiện định dạng; một tệp có tên output.xyz sẽ thất bại.

.obj tệp được lưu nhưng vật liệu bị thiếu

Khi lưu OBJ, thư viện vật liệu (.mtl) được ghi tự động bên cạnh .obj. Cả hai tệp phải nằm trong cùng một thư mục khi mở lại. Nếu bạn chỉ cần hình học, hãy đặt ObjSaveOptions.enableMaterials = false.

Lớn .gltf với các texture riêng biệt

Sử dụng .glb thay vì .gltf; nó gói dữ liệu nhị phân vào một tệp duy nhất tự chứa. Đặt GltfSaveOptions.binaryMode = true khi truyền một GltfSaveOptions đối tượng.


Câu hỏi Thường gặp

Tôi có thể lưu vào nhiều định dạng trong một lần chạy không?

Có; gọi scene.save() nhiều lần với các đường dẫn khác nhau:

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

Việc lưu có thay đổi cảnh không?

Không. scene.save() là một thao tác chỉ đọc trên đồ thị cảnh. Bạn có thể lưu cùng một cảnh vào nhiều định dạng mà không gây ra bất kỳ tác dụng phụ nào.

Tôi có thể ghi đè lên tệp nguồn không?

Có. Truyền cùng một đường dẫn tới scene.save() mà bạn đã sử dụng trong scene.open(). Thư viện ghi vào bộ đệm và sau đó ghi ra đĩa.


Xem thêm

 Tiếng Việt