介绍
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(带
.mtlmaterials), glTF 2.0 / GLB, STL(二进制和 ASCII),3MF,以及 COLLADA,可从文件路径或内存中读取Bufferobjects. 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');