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); // -1boundingSphereVisualizer(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数据的处理
- 格式转换和编码