Введение

Aspose.3D FOSS for TypeScript (@aspose/3d) — это открытая библиотека форматов 3D-файлов под лицензией MIT, в первую очередь предназначенная для Node.js. Разработчики, создающие 3D-просмотрщики моделей, конвертеры форматов, инструменты обработки геометрии или серверные 3D-конвейеры, могут установить её одной командой (см. Installation guide) и сразу начать загружать, конструировать и экспортировать 3D-контент. Библиотека использует require('fs') и Buffer из Node.js; использование в браузере требует соответствующих шимов для этих API и официально не поддерживается.

Библиотека поддерживает основные форматы обмена — OBJ, glTF 2.0 / GLB, STL, 3MF и COLLADA как для импорта, так и для экспорта. Классы импортера/экспортера FBX существуют, но пока не интегрированы в автоматическое определение формата. Граф сцены API отражает модель, знакомую из 3D-инструментов моделирования: Scene содержит rootNode, каждый Node может иметь дочерние узлы и объекты сущностей (Mesh, Camera, Light), и иерархия трансформов полностью доступна для чтения и записи.

Ключевые возможности

  • Многоформатный ввод/вывод: Импорт и экспорт OBJ (с .mtl материалами), glTF 2.0 / GLB, STL (бинарный и ASCII), 3MF и COLLADA как из файловых путей, так и из памяти Buffer объектов. Поддержка FBX ещё не интегрирована в автоопределение.
  • Граф сцены API: Scene, Node, Mesh, Camera, Light иерархия с полным управлением родителями/дочерними элементами; рекурсивный обход узлов через node.childNodes
  • систему материалов PBR: материалы Lambert, Phong и PBR (metallic/roughness), доступные через node.material
  • Операции с сеткой: Доступ к необработанным данным вершин через mesh.controlPoints (массив Vector4), индексы полигонов через mesh.polygonCount, и каналы элементов вершин через mesh.getElement()
  • Математические утилиты: Vector2, Vector3, Vector4, Matrix4, Quaternion, а также типы ограничивающих коробок для пространственных вычислений
  • Система анимации: Анимация по ключевым кадрам с AnimationClip, AnimationChannel, и кривые интерполяции (линейные, Безье, сплайн TCB)
  • Опции, специфичные для формата: По формату LoadOptions / SaveOptions классы управляют инвертированием координат, масштабом, загрузкой материалов и прочим

Начало работы

Соберите пакет из исходного кода. Требуется Node.js 18 или новее; рекомендуется 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

Загрузите файл OBJ и проверьте сцену:

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

Граф сцены API

Каждая сцена — это дерево объектов Node, корневое в scene.rootNode. Постройте иерархию с помощью addChildNode(), присоединяйте сущности, такие как Camera или Light, к узлу через его свойство entity, и считывайте локальное или мировое преобразование каждого узла через transform и 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}`);
}

Математические утилиты

Vector3, Vector4, Matrix4 и Quaternion поддерживают каждую геометрическую операцию в библиотеке. Vector3 и Vector4 раскрывают компоненты x/y/z(/w) плюс length, dot() и cross(); Matrix4 — это сетка 4×4, доступная через m00–m33 с transpose() и concatenate(); Quaternion предоставляет normalize(), conjugate(), inverse() и dot() для математики вращения.

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

См. также:

Связанные ресурсы