Pendahuluan
Aspose.3D FOSS untuk TypeScript (@aspose/3d) adalah perpustakaan format file 3D sumber terbuka dengan lisensi MIT yang terutama dirancang untuk Node.js. Pengembang yang membuat penampil model 3D, konverter format, alat pemrosesan geometri, atau pipeline 3D sisi server dapat menginstalnya dengan satu perintah (lihat Panduan Instalasi) dan langsung mulai memuat, membangun, serta mengekspor konten 3D. Perpustakaan ini menggunakan require('fs') dan Buffer dari Node.js; penggunaan di browser memerlukan shim yang tepat untuk API tersebut dan tidak didukung secara resmi.
Perpustakaan ini mendukung format pertukaran utama — OBJ, glTF 2.0 / GLB, STL, 3MF, dan COLLADA untuk impor dan ekspor. Kelas pengimpor/pengekspor FBX ada tetapi belum terhubung ke deteksi otomatis format. API scene graph mencerminkan model yang dikenal dari alat authoring 3D: sebuah Scene berisi rootNode, setiap Node dapat membawa node anak dan objek entitas (Mesh, Camera, Light), dan hierarki transformasi dapat diakses sepenuhnya untuk membaca dan menulis.
Fitur Utama
- I/O multi-format: Impor dan ekspor OBJ (dengan
.mtlmaterial), glTF 2.0 / GLB, STL (biner dan ASCII), 3MF, dan COLLADA dari jalur file maupun memoriBufferobjek. Dukungan FBX belum terhubung ke deteksi otomatis. - Grafik adegan API:
Scene,Node,Mesh,Camera,Lighthierarki dengan manajemen induk/anak penuh; telusuri node secara rekursif melaluinode.childNodes - sistem material PBR: Material Lambert, Phong, dan PBR (metallic/roughness) dapat diakses melalui
node.material - Operasi mesh: Akses data vertex mentah via
mesh.controlPoints(array ofVector4), indeks poligon melaluimesh.polygonCount, dan saluran elemen vertex melaluimesh.getElement() - Utilitas Matematika:
Vector2,Vector3,Vector4,Matrix4,Quaternion, dan tipe kotak pembatas untuk perhitungan spasial - Sistem Animasi: animasi keyframe dengan
AnimationClip,AnimationChannel, dan kurva interpolasi (linear, Bezier, TCB spline) - Opsi khusus format: Per format
LoadOptions/SaveOptionskelas mengontrol pembalikan koordinat, skala, pemuatan material, dan lainnya
Memulai
Bangun paket dari sumber. Node.js 18 atau yang lebih baru diperlukan; TypeScript 5.0+ direkomendasikan.
git clone https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-TypeScript.git
cd Aspose.3D-FOSS-for-TypeScript
npm install
npm run buildMuat file OBJ dan inspeksi adegan:
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`);
}
}
Grafik Adegan API
Setiap adegan adalah pohon objek Node yang berakar pada scene.rootNode. Bangun hierarki dengan addChildNode(), lampirkan entitas seperti Camera atau Light ke sebuah node melalui properti entity-nya, dan baca transformasi lokal atau ruang dunia masing-masing node melalui transform dan 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}`);
}
Utilitas Matematika
Vector3, Vector4, Matrix4, dan Quaternion mendukung setiap operasi geometris dalam perpustakaan. Vector3 dan Vector4 mengekspos komponen x/y/z(/w) plus length, dot(), dan cross(); Matrix4 adalah grid 4×4 yang diakses melalui m00–m33 dengan transpose() dan concatenate(); Quaternion menyediakan normalize(), conjugate(), inverse(), dan dot() untuk matematika rotasi.
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}`);