Cách Chuyển Đổi Mô Hình 3D trong TypeScript

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/3d

Bướ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 .fbx không được kết nối với bất kỳ bộ xuất nào — lưu thành .fbx sẽ 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 cho scene.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 cao open()/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ừ \ ĐếnglTF/GLBOBJSTLFBX3MFCOLLADA
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()scene.save() là đồng bộ. Sử dụng Node.js worker_threads để xử lý song song.


Xem thêm

 Tiếng Việt