Cách Chuyển Đổi Mô Hình 3D trong TypeScript
Aspose.3D FOSS for TypeScript chuyển đổi giữa các định dạng 3D bằng cách tải vào một biểu diễn trung tính Scene và lưu sang định dạng đích. Hướng dẫn này trình bày các chuyển đổi phổ biến nhất.
Hướng Dẫn Từng Bước
Bước 1: Cài đặt @aspose/3d
npm install @aspose/3dBước 2: Tải tệp nguồn
Tạo một Scene và gọi scene.open(). Sử dụng lớp *LoadOptions đặc thù cho định dạng để có kết quả tốt nhất.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);Bước 3: Lưu sang Định dạng Đích
Gọi scene.save() với đường dẫn đầu ra. Định dạng đầu ra được phát hiện từ phần mở rộng tệp.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Lưu ý: FBX không được hỗ trợ bởi
scene.save()auto-detection. Phần mở rộng.fbxkhông được kết nối với bất kỳ bộ xuất nào — lưu thành.fbxsẽ im lặng ghi nội dung định dạng OBJ thay thế. Sử dụng OBJ, glTF, STL, 3MF, hoặc COLLADA để có đầu ra đáng tin cậy.
Bước 4: Các ví dụ chuyển đổi phổ biến
OBJ sang glTF / GLB
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
scene.save('model.glb');
console.log('Converted OBJ → GLB');FBX — Không được hỗ trợ
Phát hiện tự động FBX không được kết nối trong
scene.open(). Một tệp.fbxđược truyền choscene.open()không được bất kỳ bộ phát hiện định dạng nào nhận ra và sẽ rơi vào trình phân tích STL, điều này sẽ thất bại hoặc tạo ra dữ liệu rác. Các lớp nhập/xuất FBX tồn tại trong thư viện nhưng yêu cầu gọi trực tiếp thay vì API cấp caoopen()/save(). Sử dụng COLLADA, OBJ hoặc glTF làm lựa chọn thay thế cho FBX.
glTF sang STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA sang 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Bước 5: Chuyển Đổi Hàng Loạt Nhiều Tệp
import * as fs from 'fs';
import * as path from 'path';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const inputDir = './input';
const outputDir = './output';
fs.mkdirSync(outputDir, { recursive: true });
const objFiles = fs.readdirSync(inputDir).filter(f => f.endsWith('.obj'));
for (const file of objFiles) {
const inputPath = path.join(inputDir, file);
const outputFile = file.replace('.obj', '.glb');
const outputPath = path.join(outputDir, outputFile);
const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);
console.log(`Converted ${file} → ${outputFile}`);
}Ma trận chuyển đổi được hỗ trợ
| Từ \ Đến | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX không được hỗ trợ qua API cấp cao open()/save() — định dạng này không được kết nối vào việc tự động phát hiện. Tất cả các ô FBX ở trên đều là ✗.
Các vấn đề thường gặp và cách khắc phục
Các tài liệu bị mất sau khi chuyển đổi
Vật liệu OBJ (tệp usemtl, .mtl) được tải khi ObjLoadOptions.enableMaterials = true. Khi lưu sang glTF, các thuộc tính vật liệu PBR được ánh xạ tự động. Các vật liệu phức tạp (thủ tục, đa lớp) có thể chuyển đổi với độ trung thực giảm.
Lưới hiển thị tỷ lệ không đúng
Các định dạng khác nhau sử dụng các đơn vị mặc định khác nhau (milimet cho STL, mét cho glTF). Sử dụng ObjLoadOptions.scale khi tải hoặc StlSaveOptions.scaleFactor khi lưu để chuẩn hoá đơn vị.
Sự không khớp hệ tọa độ (mô hình bị lật hoặc xoay)
Một số định dạng sử dụng trục Y hướng phải, các định dạng khác sử dụng trục Z. Sử dụng ObjLoadOptions.flipCoordinateSystem = true hoặc áp dụng một phép quay cho nút gốc sau khi tải.
Câu hỏi thường gặp
Việc chuyển đổi có giữ lại các hoạt ảnh không?
Dữ liệu hoạt hình được giữ lại khi chuyển đổi giữa các định dạng hỗ trợ nó (ví dụ, COLLADA → glTF). STL và OBJ không chứa dữ liệu hoạt hình. FBX không được hỗ trợ qua scene.open()/scene.save(), vì vậy các vòng quay hoạt hình FBX không khả dụng qua API cấp cao.
Dữ liệu kết cấu có được bảo tồn không?
Các texture được tham chiếu bởi vật liệu OBJ hoặc nhúng trong glTF sẽ được chuyển qua đồ thị cảnh. Khi lưu dưới dạng GLB (binaryMode = true), bộ đệm nhị phân được nhúng trong một tệp duy nhất. Đối với đầu ra OBJ, các texture được lưu dưới dạng các tệp riêng biệt bên cạnh .obj.
Tôi có thể chuyển đổi nhiều tệp cùng lúc không?
scene.open() và scene.save() là đồng bộ. Sử dụng Node.js worker_threads để xử lý song song.