介绍

Aspose.3D FOSS for TypeScript(@aspose/3d) 是一个开源、MIT 许可证的 3D 文件格式库,适用于 Node.js 和现代浏览器环境。构建 3D 模型查看器、格式转换器、几何处理工具或服务器端 3D 流水线的开发者可以通过单个 npm install @aspose/3d 命令安装,并立即开始加载、构建和导出 3D 内容。.

该库支持主要的互换格式——OBJ、glTF 2.0 / GLB、STL、3MF 和 COLLADA,均可用于导入和导出。虽然已有 FBX 导入/导出类,但尚未接入格式自动检测。场景图 API 复制了 3D 创作工具中熟悉的模型:一个 Scene 包含一个 rootNode,,每个 Node 可以携带子节点和实体对象(Mesh, Camera, Light),并且变换层次结构可完全读取和写入。.

关键特性

  • 多格式 I/O::导入和导出 OBJ(带 .mtl materials), glTF 2.0 / GLB, STL(二进制和 ASCII),3MF,以及 COLLADA,可从文件路径或内存中读取 Buffer objects. FBX 支持尚未接入自动检测。.
  • 场景图 API: Scene, Node, Mesh, Camera, Light 层次结构,具备完整的父/子管理;通过以下方式递归遍历节点 node.childNodes
  • PBR 材质系统::可通过以下方式访问 Lambert、Phong 和 PBR(金属度/粗糙度)材质 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');

另见