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 .mtl materiałami), glTF 2.0 / GLB, STL (binarny i ASCII), 3MF oraz COLLADA zarówno z ścieżek plików, jak i w pamięci Buffer obiektów. Obsługa FBX nie jest jeszcze podłączona do automatycznego wykrywania.
  • Graf scen API: Scene, Node, Mesh, Camera, Light hierarchia 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 (tablica Vector4), indeksy wielokątów poprzez mesh.polygonCount, oraz kanały elementów wierzchołków poprzez mesh.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 / SaveOptions klasy 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 build

Wczytaj 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}`);

Zobacz także

Powiązane zasoby