/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* BVH.hpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: TheRed +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/16 21:36:19 by TheRed #+# #+# */ /* Updated: 2025/01/16 21:36:19 by TheRed ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef RT_BVH__HPP # define RT_BVH__HPP # include "RT.hpp" struct GPUObject; struct GPUBvh; struct AABB { glm::vec3 min; glm::vec3 max; AABB(glm::vec3 min, glm::vec3 max) : min(min), max(max) {} }; class BVH { public: BVH(std::vector primitives, int first_primitive, int primitive_count); void showAABB(Scene *scene); void updateBounds(std::vector primitives); void subdivide(std::vector primitives); int size(); void flatten(std::vector &bvhs, int ¤tIndex); GPUBvh toGPUBvh(); const AABB &getAABB() const; std::vector getGPUBvhs(); private: AABB _aabb; BVH *_left; BVH *_right; bool _is_leaf; int _first_primitive; int _primitive_count; }; #endif