Введение
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}`);
См. также:
- Как загрузить 3D-модели в TypeScript
- Как экспортировать glTF в TypeScript
- Поддержка форматов
- API Reference