Hỗ trợ Định dạng 3D

Aspose.3D FOSS cho TypeScript đọc và ghi bảy định dạng tệp 3D chính. Phát hiện định dạng được thực hiện tự động khi tải: thư viện kiểm tra các số ma thuật nhị phân nên bạn không cần chỉ định định dạng nguồn. Các lớp tùy chọn riêng cho định dạng được nhập khẩu từ các đường dẫn phụ của the @aspose/3d gói.

Các định dạng được hỗ trợ

Định dạngPhần mở rộngĐọcGhiLớp Định dạngGhi chú
Wavefront OBJ.objObjFormatĐọc .mtl vật liệu; ghi .mtl cùng với .obj
glTF 2.0.gltfGltfFormatvăn bản JSON + .bin sidecar
GLB.glbGltfFormatBinary glTF; đã thiết lập binaryMode = true
STL.stlStlFormatChế độ Binary và ASCII
3MF.3mfThreeMfFormat3D Manufacturing Format
FBX.fbxKhông*Không*FbxFormatTrình nhập/xuất tồn tại nhưng việc tự động phát hiện định dạng chưa được kết nối; không thể sử dụng qua scene.open()
COLLADA.daeColladaFormatYêu cầu xmldom (tự động cài đặt)

OBJ (Wavefront)

OBJ hỗ trợ cả nhập và xuất trong @aspose/3d. Khi lưu dưới dạng OBJ, thư viện vật liệu (.mtl) được ghi tự động bên cạnh .obj tệp. Sử dụng ObjLoadOptions để kiểm soát việc tải vật liệu và hành vi của hệ thống tọa độ.

Các tùy chọn chính cho ObjLoadOptions:

Tùy chọnKiểuMặc địnhHiệu ứng
enableMaterialsbooleantruePhân tích .mtl tệp được tham chiếu bởi mtllib
flipCoordinateSystembooleanfalseLật các trục Y/Z để phù hợp với hệ thống tay phải
scalenumber1.0Tỷ lệ đồng nhất được áp dụng cho tất cả các đỉnh khi tải
normalizeNormalbooleantrueChuẩn hoá các pháp tuyến đỉnh về độ dài đơn vị
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
opts.normalizeNormal = true;

scene.open('model.obj', opts);
console.log(`Loaded ${scene.rootNode.childNodes.length} top-level node(s)`);

Để chuyển đổi một OBJ sang bất kỳ định dạng có thể ghi nào, tải nó và gọi scene.save() với lớp định dạng mục tiêu.

glTF and GLB

glTF 2.0 là định dạng trao đổi được khuyến nghị cho việc sử dụng trên web và các engine game. Thư viện sử dụng cùng một GltfFormat lớp cho cả .gltf (JSON + sidecar) và .glb (nhị phân, tự chứa) đầu ra. Chuyển đổi giữa chúng bằng GltfSaveOptions.binaryMode.

Tải glTF hoặc GLB:

import { Scene } from '@aspose/3d';
import { GltfLoadOptions } from '@aspose/3d/formats/gltf';

const scene = new Scene();
scene.open('model.gltf', new GltfLoadOptions());
// or
scene.open('model.glb');  // format detected from magic bytes

Xuất dưới dạng JSON glTF (.gltf + .bin):

import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';

const scene = new Scene();
scene.open('input.fbx');

const opts = new GltfSaveOptions();
opts.binaryMode = false;  // produces output.gltf + output.bin
scene.save('output.gltf', GltfFormat.getInstance(), opts);

Xuất dưới dạng GLB nhị phân (.glb):

import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';

const scene = new Scene();
scene.open('input.obj');

const opts = new GltfSaveOptions();
opts.binaryMode = true;  // single self-contained file
scene.save('output.glb', GltfFormat.getInstance(), opts);

Sử dụng binaryMode = true cho việc cung cấp tài sản trong môi trường sản xuất. Một .glb tải nhanh hơn trong các trình duyệt và engine so với cặp văn bản + nhị phân tách rời.

STL

STL là một định dạng lưới tam giác được sử dụng trong CAD và in 3D. Cả STL nhị phân và ASCII đều được hỗ trợ cho việc nhập và xuất. StlSaveOptions.binaryMode kiểm soát việc đầu ra là nhị phân (gọn gàng) hay ASCII (dễ đọc cho con người).

import { Scene } from '@aspose/3d';
import { StlLoadOptions, StlSaveOptions } from '@aspose/3d/formats/stl';

const scene = new Scene();
scene.open('model.stl', new StlLoadOptions());

// Export as binary STL (default, compact)
const binaryOpts = new StlSaveOptions();
binaryOpts.binaryMode = true;
scene.save('output_binary.stl', binaryOpts);

// Export as ASCII STL (human-readable)
const asciiOpts = new StlSaveOptions();
asciiOpts.binaryMode = false;
scene.save('output_ascii.stl', asciiOpts);

STL chỉ lưu trữ hình học tam giác và các vector pháp tuyến đỉnh. Dữ liệu vật liệu và UV không được giữ lại trong STL.

3MF (3D Manufacturing Format)

3MF is an XML-based format designed for additive manufacturing. It supports color and material metadata alongside geometry. Use it when exchanging files with 3D printing slicers or manufacturing workflows.

import { Scene } from '@aspose/3d';
import { ThreeMfSaveOptions } from '@aspose/3d/formats/3mf';

const scene = new Scene();
scene.open('model.3mf');

// Re-export as 3MF
scene.save('output.3mf', new ThreeMfSaveOptions());

3MF files are ZIP archives internally. The library handles archive creation and extraction automatically.

FBX

Cảnh báo: các lớp nhập và xuất FBX (FbxImporter, FbxExporter) tồn tại trong thư viện, nhưng việc tự động phát hiện định dạng FBX là không được kết nối vào scene.open() hoặc scene.save(). Gọi scene.open('file.fbx') sẽ không gọi trình nhập FBX — tệp sẽ chuyển sang dự phòng STL. scene.save('output.fbx', opts) sẽ không gọi trình xuất FBX. Bảng hỗ trợ định dạng ở trên đánh dấu FBX là No* vì lý do này. Sử dụng GLB hoặc COLLADA để nhập và xuất đầy đủ chức năng qua scene.open() / scene.save().

COLLADA (DAE)

COLLADA là một định dạng trao đổi dựa trên XML được hỗ trợ bởi nhiều công cụ DCC (Blender, Maya, Cinema 4D). Thư viện sử dụng xmldom phụ thuộc để phân tích XML; nó được cài đặt tự động cùng với npm install @aspose/3d.

import { Scene } from '@aspose/3d';
import { ColladaSaveOptions } from '@aspose/3d/formats/collada';

const scene = new Scene();
scene.open('model.dae');

// Re-export as COLLADA
const saveOpts = new ColladaSaveOptions();
scene.save('output.dae', saveOpts);

Các tệp COLLADA có thể chứa siêu dữ liệu tỷ lệ đơn vị (<unit> phần tử). Thư viện tự động áp dụng chuyển đổi đơn vị khi tải.

Tự động phát hiện định dạng

Khi tải từ một đường dẫn tệp, thư viện sẽ cố gắng phát hiện định dạng dựa trên các số ma thuật nhị phân trước khi quay lại phần mở rộng tệp. Điều này có nghĩa là bạn có thể tải một tệp GLB có tên .bin hoặc một tệp STL có tên .model mà không cần chỉ định định dạng một cách rõ ràng.

Khi tải từ một Buffer với scene.openFromBuffer(), việc phát hiện magic-number là cơ chế chính:

import { Scene } from '@aspose/3d';
import * as fs from 'fs';

const buffer = fs.readFileSync('model.glb');
const scene = new Scene();
scene.openFromBuffer(buffer);  // format detected from magic bytes: 'glTF'

console.log(`Root has ${scene.rootNode.childNodes.length} child node(s)`);

Các định dạng có magic numbers đáng tin cậy: GLB (glTF), STL binary (tiêu đề 80-byte + số lượng tam giác), 3MF (ZIP magic PK). OBJ và COLLADA là dạng văn bản và được phát hiện dựa trên phần mở rộng tệp hoặc bằng lớp tùy chọn bạn truyền.

Mẹo

  • OBJ hỗ trợ cả nhập và xuất: khi lưu dưới dạng OBJ, tệp .mtl tệp vật liệu được ghi tự động bên cạnh .obj tệp.
  • Sử dụng GLB cho việc phân phối trên web: định dạng nhị phân tự chứa giúp tránh các vấn đề CORS với .bin các tệp phụ và tải nhanh hơn trong các trình render WebGL.
  • Cung cấp các tùy chọn riêng cho định dạng: chung scene.open(path) hoạt động cho hầu hết các định dạng, nhưng việc truyền lớp tùy chọn loader cho phép hành vi riêng cho từng định dạng như tải vật liệu OBJ hoặc chuẩn hoá tọa độ STL.
  • xmldom được yêu cầu cho COLLADA: nó được cài đặt tự động. Đừng thêm nó vào peerDependencies hoặc cố gắng xóa nó; trình đọc COLLADA gọi trực tiếp nó.

Các vấn đề thường gặp

Triệu chứngNguyên nhân có khả năngSửa
Vật liệu OBJ trống sau khi tảienableMaterials chưa được đặtBỏ qua ObjLoadOptions với enableMaterials = true
GLB tạo ra một .bin tệp phụbinaryMode mặc định là falseĐặt opts.binaryMode = true trong GltfSaveOptions
scene.open() báo lỗi “unsupported format”Phần mở rộng tệp không được nhận dạngChuyển qua khớp *LoadOptions lớp hoặc sử dụng openFromBuffer()
Việc tải COLLADA thất bại với lỗi XMLxmldom thiếu hoặc không khớpChạy npm install @aspose/3d lại; xmldom là một phụ thuộc trực tiếp
Pháp tuyến STL bị mất trong xuất ASCIIASCII STL không có các pháp tuyến cho mỗi mặtSử dụng binaryMode = true để xuất ra bảo toàn pháp tuyến

Xem Thêm

 Tiếng Việt