Giới thiệu

Aspose.3D FOSS cho TypeScript (@aspose/3d) là một thư viện định dạng tệp 3D mã nguồn mở, được cấp phép MIT, chủ yếu được thiết kế cho Node.js. Các nhà phát triển xây dựng trình xem mô hình 3D, bộ chuyển đổi định dạng, công cụ xử lý hình học, hoặc các pipeline 3D phía máy chủ có thể cài đặt nó bằng một lệnh duy nhất (xem Installation guide) và ngay lập tức bắt đầu tải, xây dựng và xuất nội dung 3D. Thư viện sử dụng require('fs') và Buffer từ Node.js; việc sử dụng trên trình duyệt yêu cầu các shim thích hợp cho các API đó và không được hỗ trợ chính thức.

Thư viện hỗ trợ các định dạng trao đổi chính — OBJ, glTF 2.0 / GLB, STL, 3MF và COLLADA cho cả nhập và xuất. Các lớp nhập/xuất FBX tồn tại nhưng chưa được kết nối vào việc tự động phát hiện định dạng. Đồ thị cảnh API phản chiếu mô hình quen thuộc từ các công cụ tạo 3D: một Scene chứa một rootNode, mỗi Node có thể mang các nút con và các đối tượng thực thể (Mesh, Camera, Light), và hệ thống phân cấp biến đổi hoàn toàn có thể truy cập để đọc và ghi.

Các tính năng chính

  • I/O đa định dạng: Nhập và xuất OBJ (với .mtl vật liệu), glTF 2.0 / GLB, STL (binary và ASCII), 3MF, và COLLADA từ cả đường dẫn tệp và bộ nhớ Buffer đối tượng. Hỗ trợ FBX chưa được kết nối vào phát hiện tự động.
  • Đồ thị cảnh API: Scene, Node, Mesh, Camera, Light cây phân cấp với quản lý cha/con đầy đủ; duyệt các nút một cách đệ quy qua node.childNodes
  • hệ thống vật liệu PBR: Vật liệu Lambert, Phong và PBR (metallic/roughness) có thể truy cập qua node.material
  • Các thao tác lưới: Truy cập dữ liệu đỉnh thô thông qua mesh.controlPoints (mảng của Vector4), chỉ số đa giác thông qua mesh.polygonCount, và các kênh phần tử đỉnh thông qua mesh.getElement()
  • Tiện ích toán học: Vector2, Vector3, Vector4, Matrix4, Quaternion, và các kiểu hộp bao cho các phép tính không gian
  • Hệ thống hoạt hình: Hoạt hình keyframe với AnimationClip, AnimationChannel, và các đường cong nội suy (linear, Bezier, TCB spline)
  • Các tùy chọn riêng cho định dạng: Theo định dạng LoadOptions / SaveOptions các lớp kiểm soát việc lật tọa độ, tỉ lệ, tải vật liệu và hơn nữa

Bắt đầu

Xây dựng gói từ mã nguồn. Node.js 18 hoặc mới hơn là bắt buộc; TypeScript 5.0+ được khuyến nghị.

git clone https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-TypeScript.git
cd Aspose.3D-FOSS-for-TypeScript
npm install
npm run build

Tải tệp OBJ và kiểm tra cảnh:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.open('model.obj', options);

for (const node of scene.rootNode.childNodes) {
    if (node.entity && 'controlPoints' in node.entity) {
        const mesh = node.entity as any;
        console.log(`Mesh "${node.name}": ${mesh.controlPoints.length} vertices`);
    }
}

Đồ thị Cảnh API

Mỗi cảnh là một cây các đối tượng Node có gốc tại scene.rootNode. Xây dựng phân cấp bằng addChildNode(), gắn các thực thể như Camera hoặc Light vào một nút thông qua thuộc tính entity của nó, và đọc phép biến đổi không gian cục bộ hoặc toàn cục của mỗi nút qua transform và globalTransform.

import { Scene, Node, Camera, Light } from '@aspose/3d';

const scene = new Scene();

const cameraNode = new Node('MainCamera');
cameraNode.entity = new Camera('MainCamera');
scene.rootNode.addChildNode(cameraNode);

const lightNode = new Node('KeyLight');
lightNode.entity = new Light('KeyLight');
scene.rootNode.addChildNode(lightNode);

for (const child of scene.rootNode.childNodes) {
    console.log(`${child.name}: ${child.entity?.constructor.name}`);
}

Tiện ích Toán học

Vector3, Vector4, Matrix4, và Quaternion hỗ trợ mọi phép toán hình học trong thư viện. Vector3 và Vector4 cung cấp các thành phần x/y/z(/w) cùng với length, dot(), và cross(); Matrix4 là một lưới 4×4 được truy cập qua m00–m33 với transpose() và concatenate(); Quaternion cung cấp normalize(), conjugate(), inverse(), và dot() cho toán học quay.

import { Vector3, Quaternion, Matrix4 } from '@aspose/3d/utilities';

const position = new Vector3(1.0, 2.0, 3.0);
const rotation = new Quaternion(1.0, 0.0, 0.0, 0.0);
const transform = new Matrix4();

console.log(`length=${position.length} determinant=${transform.determinant}`);
console.log(`rotation w=${rotation.w} x=${rotation.x} y=${rotation.y} z=${rotation.z}`);

Xem thêm

Tài nguyên liên quan