Skip to content

Utils

提供各种实用的工具函数,包括树遍历、内存管理、数组操作、可视化等功能。所有方法都是静态方法,可以直接通过类名调用。

类定义

javascript
class Utils

静态方法

pre_traverse(node, callback)

N叉树前序遍历,对N叉树进行前序遍历(根-左-右),先访问根节点,再递归访问子节点。

参数:

  • node {Object} - 要遍历的节点
  • callback {function(Object)} - 回调函数,对每个节点执行的操作

静态: true

示例:

javascript
// 前序遍历树节点
Utils.pre_traverse(rootNode, (node) => {
    console.log('访问节点:', node.name);
});

after_traverse(node, callback)

N叉树后序遍历,对N叉树进行后序遍历(左-右-根),先递归访问子节点,最后访问根节点。

参数:

  • node {Object} - 要遍历的节点
  • callback {function(Object)} - 回调函数,对每个节点执行的操作

静态: true

示例:

javascript
// 后序遍历树节点
Utils.after_traverse(rootNode, (node) => {
    console.log('访问节点:', node.name);
});

level_traverse(node, callback)

N叉树层次遍历,对N叉树进行层次遍历(广度优先),按层级逐层访问节点。

参数:

  • node {Object} - 要遍历的节点
  • callback {function(Object)} - 回调函数,对每个节点执行的操作

静态: true

示例:

javascript
// 层次遍历树节点
Utils.level_traverse(rootNode, (node) => {
    console.log('访问节点:', node.name);
});

releaseMemory(object)

释放Object3D对象内存,递归释放Object3D对象及其子对象的内存,包括几何体和材质的释放。

参数:

  • object {Object3D} - 要释放内存的Object3D对象

静态: true

示例:

javascript
// 释放对象内存
Utils.releaseMemory(object3D);

// 释放后对象将无法使用
console.log('内存已释放');

arrayReplace(array, replaceArray, start, end)

数组区间替换,将数组中指定区间的元素替换为新的数组元素。

参数:

  • array {Array} - 原始数组
  • replaceArray {Array} - 替换的数组段
  • start {number} - 开始位置(包含)
  • end {number} - 结束位置(不包含)

返回值:

  • {Array} 替换后的新数组

静态: true

示例:

javascript
// 数组区间替换
const original = [1, 2, 3, 4, 5];
const replaced = Utils.arrayReplace(original, [10, 20], 1, 3);
console.log(replaced); // [1, 10, 20, 4, 5]

binarySearch(array, target)

二分查找,在已排序的数组中查找目标元素,使用二分查找算法提高查找效率。

参数:

  • array {Array} - 已排序的查找数组
  • target {*} - 要查找的目标元素

返回值:

  • {number} 目标元素的索引,如果未找到返回-1

静态: true

示例:

javascript
// 二分查找
const sortedArray = [1, 3, 5, 7, 9, 11, 13];
const index = Utils.binarySearch(sortedArray, 7);
console.log('找到索引:', index); // 3

const notFound = Utils.binarySearch(sortedArray, 6);
console.log('未找到:', notFound); // -1

boundingSphereVisualizer(object3D)

包围球可视化,为Object3D对象创建包围球的可视化效果,生成半透明的蓝色球体。

参数:

  • object3D {Object3D} - 要可视化的Object3D对象

返回值:

  • {Group} 包含包围球可视化对象的组

静态: true

示例:

javascript
// 创建包围球可视化
const sphereGroup = Utils.boundingSphereVisualizer(object3D);
scene.add(sphereGroup);

// 移除可视化
scene.remove(sphereGroup);

boundingBoxVisualizer(object3D)

包围盒可视化,为Object3D对象创建包围盒的可视化效果,生成随机颜色的线框盒子。

参数:

  • object3D {Object3D} - 要可视化的Object3D对象

返回值:

  • {Group} 包含包围盒可视化对象的组

静态: true

示例:

javascript
// 创建包围盒可视化
const boxGroup = Utils.boundingBoxVisualizer(object3D);
scene.add(boxGroup);

// 移除可视化
scene.remove(boxGroup);

rebuildBVHTreeFromJson(json)

从JSON重建BVH树,根据序列化的JSON数据重建BVH树结构。

参数:

  • json {Object} - BVH树的序列化JSON数据

返回值:

  • {BVHNode} 重建的BVH树根节点

静态: true

示例:

javascript
// 从JSON重建BVH树
const bvhTree = Utils.rebuildBVHTreeFromJson(jsonData);
console.log('BVH树已重建:', bvhTree);

Base64ToBlobUrl(base64)

Base64编码转换为Blob URL,将Base64编码的字符串转换为Blob对象,并生成可用的URL。

参数:

  • base64 {string} - Base64编码的字符串

返回值:

  • {string} Blob对象的URL

静态: true

示例:

javascript
// 转换Base64为Blob URL
const base64String = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...';
const blobUrl = Utils.Base64ToBlobUrl(base64String);

// 使用URL
const img = new Image();
img.src = blobUrl;

使用场景

树遍历

  • 遍历3D场景的层级结构
  • 查找特定类型的对象
  • 批量处理场景节点

内存管理

  • 释放不再使用的3D对象
  • 防止内存泄漏

数组操作

  • 高效的数据替换
  • 快速查找算法
  • 数据处理和转换

可视化调试

  • 显示对象的包围盒和包围球
  • 调试几何体边界
  • 可视化碰撞检测区域

数据转换

  • BVH树的序列化和反序列化
  • Base64数据的处理
  • 格式转换和编码

相关链接

文档内容为北京逆维悦动科技有限公司版权所有,禁止未授权转载