36 lines
1.2 KiB
36 lines
1.2 KiB
2 years ago
|
// AABB部分的代码直接原封不动用的gitea/GeometryMain/surface-surface-intersection.git中bvh的代码,之后可以合并过去
|
||
|
#ifndef AABB_HPP
|
||
|
#define AABB_HPP
|
||
|
|
||
|
#include "glm/glm.hpp"
|
||
|
#include <cmath>
|
||
|
|
||
|
class AABB {
|
||
|
public:
|
||
|
// 边界
|
||
|
glm::dvec3 pMin, pMax;
|
||
|
|
||
|
public:
|
||
|
AABB() {
|
||
|
double minNum = std::numeric_limits<double>::lowest();
|
||
|
double maxNum = std::numeric_limits<double>::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
|