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/3dBướ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ạng | Ghi chú |
|---|---|---|
.glb | glTF 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 |
.gltf | glTF 2.0 JSON | Riêng .bin và các tệp texture kèm theo JSON |
.obj | Wavefront OBJ | Ghi .mtl tệp vật liệu kèm theo .obj khi có vật liệu |
.stl | STL | Mặc định: STL nhị phân; sử dụng StlSaveOptions.ascii = true cho văn bản |
.fbx | Autodesk FBX | Định dạng FBX nhị phân |
.3mf | 3D Manufacturing | Phù hợp cho quy trình in 3D |
.dae | COLLADA | Đị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.