计算 BVHNode 的边界盒体积。
computeBoundingVolume()
无。
无。
const node = new BVHNode(objects);
node.computeBoundingVolume();
BVHNode 的边界盒体积信息存储于 bv 中,在构建 BVH 树时需要计算每个 BVHNode 的边界盒体积。该函数用于计算该边界盒体积。
计算 BVHNode 的边界盒体积的方式如下:
class BVHNode {
constructor(objects) {
this.bv = new BoundingBox();
this.objects = objects;
this.left = null;
this.right = null;
this.construct(objects);
}
construct(objects) {
// 构建 BVH 树
// ...
}
computeBoundingVolume() {
if (this.objects.length === 1) {
this.bv.copy(this.objects[0].getBoundingBox());
} else {
const leftBV = new BoundingBox();
const rightBV = new BoundingBox();
this.left.computeBoundingVolume(leftBV);
this.right.computeBoundingVolume(rightBV);
this.bv.union(leftBV, rightBV);
}
}
}
该函数通常在 BVH 树构建完毕后调用。在构建 BVH 树时建议将 BVHNode 的 boundingVolume 前置为一个空的 bounding box,计算完和左右子树的 bounding box 后再赋值到 boundingVolume 上,以避免不必要的计算量。