diff --git a/Step 3/include/engine/math/bvh.h b/Step 3/include/engine/math/bvh.h index 9df39c9..8798675 100644 --- a/Step 3/include/engine/math/bvh.h +++ b/Step 3/include/engine/math/bvh.h @@ -8,6 +8,7 @@ #include "engine/util/std.h" #include "engine/types.h" +#include "engine/util/models.h" #include #ifdef COMPILE_GUI @@ -40,11 +41,11 @@ namespace Raytracing { inline bool operator==(const BVHPartitionedSpace& left, const BVHPartitionedSpace& right) { if (left.left.size() != right.left.size() || left.right.size() != right.right.size()) return false; - for (int i = 0; i < left.left.size(); i++){ + for (int i = 0; i < left.left.size(); i++) { if (left.left[i].aabb != right.left[i].aabb) return false; } - for (int i = 0; i < left.right.size(); i++){ + for (int i = 0; i < left.right.size(); i++) { if (left.right[i].aabb != right.right[i].aabb) return false; } @@ -62,12 +63,8 @@ namespace Raytracing { AABB aabb; BVHNode* left; BVHNode* right; - int index; - int hit = 0; BVHNode(std::vector objs, AABB aabb, BVHNode* left, BVHNode* right): objs(std::move(objs)), aabb(std::move(aabb)), - left(left), right(right) { - index = count++; - } + left(left), right(right) {} BVHHitData firstHitRayIntersectTraversal(const Ray& r, PRECISION_TYPE min, PRECISION_TYPE max); ~BVHNode() { delete (left); @@ -101,6 +98,35 @@ namespace Raytracing { } }; + struct TriangleBVHObject { + Triangle* ptr = nullptr; + AABB aabb; + }; + + struct TriangleBVHPartitionedSpace { + std::vector left; + std::vector right; + }; + + struct TriangleBVHNode { + struct BVHHitData { + TriangleBVHNode* ptr{}; + AABBHitData data{}; + bool hit = false; + }; + std::vector objs; + AABB aabb; + TriangleBVHNode* left; + TriangleBVHNode* right; + + TriangleBVHNode(std::vector objs, AABB aabb, TriangleBVHNode* left, TriangleBVHNode* right) + : objs(std::move(objs)), aabb(std::move(aabb)), left(left), right(right) {} + ~TriangleBVHNode() { + delete (left); + delete (right); + } + }; + } #endif //STEP_2_BVH_H