Úvod

Aspose.3D FOSS pro TypeScript (@aspose/3d) je open-source knihovna pro 3D formáty souborů s licencí MIT, primárně navržená pro Node.js. Vývojáři, kteří vytvářejí prohlížeče 3D modelů, konvertory formátů, nástroje pro zpracování geometrie nebo server-side 3D pipeline, ji mohou nainstalovat jedním příkazem (viz Instalační průvodce) a okamžitě začít načítat, vytvářet a exportovat 3D obsah. Knihovna využívá require('fs') a Buffer z Node.js; použití v prohlížeči vyžaduje vhodné shim-y pro tato API a není oficiálně podporováno.

Knihovna podporuje hlavní výměnné formáty — OBJ, glTF 2.0 / GLB, STL, 3MF a COLLADA pro import i export. Třídy importéru/exportéru FBX existují, ale zatím nejsou zapojeny do automatické detekce formátu. Scénový graf API odráží model známý z 3D autorovacích nástrojů: Scene obsahuje rootNode, každý Node může nést podřízené uzly a objekty entit (Mesh, Camera, Light) a hierarchie transformací je plně přístupná pro čtení i zápis.

Klíčové vlastnosti

  • Víceformátové I/O: Import a export OBJ (s .mtl materiály), glTF 2.0 / GLB, STL (binární a ASCII), 3MF a COLLADA z jakýchkoli souborových cest i z paměti Buffer objektů. Podpora FBX ještě není propojena s automatickým rozpoznáváním.
  • Scénový graf API: Scene, Node, Mesh, Camera, Light hierarchie s plnou správou rodič/potomek; procházet uzly rekurzivně pomocí node.childNodes
  • Systém materiálů PBR: Materiály Lambert, Phong a PBR (metallic/roughness) přístupné přes node.material
  • Operace sítě: Přístup k surovým datům vrcholů přes mesh.controlPoints (pole Vector4), indexy polygonů pomocí mesh.polygonCount, a kanály elementů vrcholů pomocí mesh.getElement()
  • Matematické utility: Vector2, Vector3, Vector4, Matrix4, Quaternion, a typy ohraničujících boxů pro prostorové výpočty
  • Systém animace: Animace klíčových snímků s AnimationClip, AnimationChannel, a křivky interpolace (lineární, Bézier, TCB spline)
  • Možnosti specifické pro formát: Podle formátu LoadOptions / SaveOptions třídy řídí převracení souřadnic, měřítko, načítání materiálů a další

Začínáme

Sestavte balíček ze zdrojového kódu. Node.js 18 nebo novější je vyžadován; TypeScript 5.0+ se doporučuje.

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

Načtěte soubor OBJ a prozkoumejte scénu:

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 scény API

Každá scéna je strom Node objektů zakořeněný v scene.rootNode. Vytvořte hierarchii pomocí addChildNode(), připojte entity jako Camera nebo Light k uzlu přes jeho vlastnost entity, a přečtěte si lokální nebo světový transform každého uzlu pomocí transform a 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}`);
}

Matematické utility

Vector3, Vector4, Matrix4 a Quaternion podporují všechny geometrické operace v knihovně. Vector3 a Vector4 vystavují komponenty x/y/z(/w) plus length, dot() a cross(); Matrix4 je 4×4 mřížka přístupná přes m00–m33 s transpose() a concatenate(); Quaternion poskytuje normalize(), conjugate(), inverse() a dot() pro výpočet rotací.

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

Viz také:

Související zdroje