Введение

Aspose.3D FOSS для TypeScript (@aspose/3d) является открытой, лицензированной по MIT библиотекой форматов 3D‑файлов для Node.js и современных браузерных сред. Разработчики, создающие 3D‑просмотрщики моделей, конвертеры форматов, инструменты обработки геометрии или серверные 3D‑конвейеры, могут установить её одним npm install @aspose/3d команда и сразу начать загрузку, построение и экспорт 3D‑контента.

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

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

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

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

Установите через npm. Требуется Node.js 18 или новее; рекомендуется TypeScript 5.0+.

npm install @aspose/3d

Загрузите файл 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`);
    }
}

Экспорт в glTF

Сохраните любую загруженную или построенную сцену в бинарный glTF 2.0 (GLB):

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
scene.open('input.obj', new ObjLoadOptions());
scene.save('output.glb');
console.log('Exported to output.glb');

Библиотека автоматически определяет формат вывода по расширению файла. Передайте GltfSaveOptions экземпляр для управления встраиванием PBR-материалов, текстурами и кодированием в бинарном или JSON-формате.

Создание сцены

Создайте сцену программно и экспортируйте её:

import { Scene, Node } from '@aspose/3d';
import { Mesh } from '@aspose/3d/entities';

const scene = new Scene();
const mesh = new Mesh();
// ... populate mesh.controlPoints and polygons ...
const node = new Node('myMesh');
node.entity = mesh;
scene.rootNode.addChildNode(node);
scene.save('programmatic.glb');

См. также