Optimise BVH

This commit is contained in:
CJSatnarine
2024-07-08 17:54:58 -04:00
parent 80f3aff65d
commit 8a50479e27
5 changed files with 926 additions and 909 deletions

14
aabb.h
View File

@@ -53,6 +53,20 @@ class aabb {
}
return true;
}
int longestAxis() const {
// Returns the index of the longest axis of the bounding box.
if (x.size() > y.size()) {
return x.size() > z.size() ? 0 : 2;
} else {
return y.size() > z.size() ? 1 : 2;
}
}
static const aabb empty, universe;
};
const aabb aabb::empty = aabb(interval::empty, interval::empty, interval::empty);
const aabb aabb::universe = aabb(interval::universe, interval::universe, interval::universe);
#endif

Binary file not shown.

9
bvh.h
View File

@@ -14,7 +14,12 @@ class bvh_node : public hittable {
}
bvh_node(std::vector<shared_ptr<hittable>>& objects, size_t start, size_t end) {
int axis = randomInt(0,2);
bBox = aabb::empty;
for (size_t objectIndex = start; objectIndex < end; objectIndex++) {
bBox = aabb(bBox, objects[objectIndex]->boundingBox());
}
int axis = bBox.longestAxis();
auto comparator = (axis == 0) ? boxXCompare
: (axis == 1) ? boxYCompare
@@ -34,8 +39,6 @@ class bvh_node : public hittable {
left = make_shared<bvh_node>(objects, start, mid);
right = make_shared<bvh_node>(objects, mid, end);
}
bBox = aabb(left->boundingBox(), right->boundingBox());
}
bool hit(const ray& r, interval ray_t, hitRecord& rec) const override {

1812
image.ppm

File diff suppressed because it is too large Load Diff