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
.mtlvậ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,Lightcây phân cấp với quản lý cha/con đầy đủ; duyệt các nút một cách đệ quy quanode.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ủaVector4), chỉ số đa giác thông quamesh.polygonCount, và các kênh phần tử đỉnh thông quamesh.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/SaveOptionscá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 buildTả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}`);