// AABB部分的代码直接原封不动用的gitea/GeometryMain/surface-surface-intersection.git中bvh的代码,之后可以合并过去 #ifndef AABB_HPP #define AABB_HPP #include "glm/glm.hpp" #include "real.h" #include class AABB { public: // 边界 glm::dvec3 pMin, pMax; public: AABB() { real minNum = std::numeric_limits::lowest(); real maxNum = std::numeric_limits::max(); pMax = glm::dvec3(minNum, minNum, minNum); pMin = glm::dvec3(maxNum, maxNum, maxNum); } AABB(const glm::dvec3 p) : pMin(p), pMax(p) {} AABB(const glm::dvec3 p1, const glm::dvec3 p2) { pMin = glm::dvec3(fmin(p1.x, p2.x), fmin(p1.y, p2.y), fmin(p1.z, p2.z)); pMax = glm::dvec3(fmax(p1.x, p2.x), fmax(p1.y, p2.y), fmax(p1.z, p2.z)); } }; // 判断点是否在包围盒内,是返回true,否返回false bool isPointInBox(const glm::dvec3 &pt, const AABB &box); // aabb包围盒合并操作,包围盒和点 AABB Union(const AABB &b1, const glm::dvec3 &p); // aabb包围盒合并操作,两个包围盒 AABB Union(const AABB &b1, const AABB &b2); // 判断两个aabb包围盒是否重叠 bool IsOverlap(AABB b1, AABB b2); #endif