split
方法是 BVHNode
对象上的一个方法,用于对当前节点进行切分,并生成两个新的子节点。
split(axis: string, position: number): void
axis
: 切分的轴,必须是字符串类型,取值可以为 'x'
、'y'
或 'z'
。position
: 切分的位置,必须是数字类型,表示切分平面的坐标,如果值小于当前节点范围的最小值或大于最大值,则将该值限制在最小或最大值之间。let node = new BVHNode(boundingBoxes);
// 在x轴上进行切分,切分平面位置为 20
node.split('x', 20);
// 此时 node 的左右子节点就已经生成了
// 可以对node左右子节点继续使用 split 方法进行递归切分
BVHNode.split
方法首先计算出当前节点在指定轴上的中心点位置,然后将所有边界框按照其在该轴上的位置关系(小于中心点或大于等于中心点)分别归入两个新的子节点中,最后更新自身的 boundingBox
属性为两个新子节点的包围盒。切分完成后,可以通过获取 BVHNode
的 left
和 right
属性来分别获取左右子节点。