Wprowadzenie
Aspose.3D FOSS dla TypeScript (@aspose/3d) jest otwarto-źródłową, na licencji MIT biblioteką formatu 3D, zaprojektowaną głównie dla Node.js. Programiści tworzący przeglądarki modeli 3D, konwertery formatów, narzędzia przetwarzania geometrii lub serwerowe pipeline’y 3D mogą zainstalować ją jednym poleceniem (zobacz Installation guide) i od razu rozpocząć ładowanie, budowanie oraz eksportowanie treści 3D. Biblioteka wykorzystuje require('fs') i Buffer z Node.js; użycie w przeglądarce wymaga odpowiednich shimów dla tych API i nie jest oficjalnie wspierane.
Biblioteka obsługuje główne formaty wymiany — OBJ, glTF 2.0 / GLB, STL, 3MF i COLLADA zarówno przy imporcie, jak i eksporcie. Istnieją klasy importera/eksportera FBX, ale nie zostały jeszcze podłączone do automatycznego wykrywania formatu. Graf sceny API odzwierciedla model znany z narzędzi do tworzenia 3D: Scene zawiera rootNode, każdy Node może posiadać węzły potomne i obiekty encji (Mesh, Camera, Light), a hierarchia transformacji jest w pełni dostępna do odczytu i zapisu.
Kluczowe funkcje
- Wejście/wyjście wieloformatowe: Import i eksport OBJ (z
.mtlmateriałami), glTF 2.0 / GLB, STL (binarny i ASCII), 3MF oraz COLLADA zarówno z ścieżek plików, jak i w pamięciBufferobiektów. Obsługa FBX nie jest jeszcze podłączona do automatycznego wykrywania. - Graf scen API:
Scene,Node,Mesh,Camera,Lighthierarchia z pełnym zarządzaniem rodzic/dziecko; przeglądaj węzły rekurencyjnie za pomocąnode.childNodes - system materiałów PBR: materiały Lambert, Phong i PBR (metallic/roughness) dostępne poprzez
node.material - Operacje siatki: Uzyskaj dostęp do surowych danych wierzchołków poprzez
mesh.controlPoints(tablicaVector4), indeksy wielokątów poprzezmesh.polygonCount, oraz kanały elementów wierzchołków poprzezmesh.getElement() - Narzędzia matematyczne:
Vector2,Vector3,Vector4,Matrix4,Quaternion, oraz typy pudełek ograniczających do obliczeń przestrzennych - System animacji: Animacja klatek kluczowych z
AnimationClip,AnimationChannel, oraz krzywe interpolacji (liniowe, Bezier, TCB spline) - Opcje specyficzne dla formatu: Dla każdego formatu
LoadOptions/SaveOptionsklasy kontrolują odwracanie współrzędnych, skalę, ładowanie materiałów i inne
Rozpoczęcie
Zbuduj pakiet ze źródeł. Wymagany jest Node.js w wersji 18 lub nowszej; zalecane jest TypeScript 5.0+.
git clone https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-TypeScript.git
cd Aspose.3D-FOSS-for-TypeScript
npm install
npm run buildWczytaj plik OBJ i przejrzyj scenę:
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`);
}
}
Graf sceny API
Każda scena jest drzewem obiektów Node z korzeniem w scene.rootNode. Zbuduj hierarchię przy użyciu addChildNode(), dołącz jednostki takie jak Camera lub Light do węzła za pomocą jego właściwości entity, i odczytaj lokalną lub światową transformację każdego węzła poprzez transform i 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}`);
}
Narzędzia matematyczne
Vector3, Vector4, Matrix4 i Quaternion obsługują każdą operację geometryczną w bibliotece. Vector3 i Vector4 udostępniają komponenty x/y/z(/w) oraz length, dot() i cross(); Matrix4 to siatka 4×4 dostępna przez m00–m33 z transpose() i concatenate(); Quaternion zapewnia normalize(), conjugate(), inverse() i dot() do matematyki rotacji.
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}`);