add triggers

This commit is contained in:
MihailRis
2024-06-30 16:25:08 +03:00
parent 50c714692a
commit 5769be8ec8
15 changed files with 239 additions and 64 deletions
+42 -1
View File
@@ -6,13 +6,16 @@
/// @brief Axis Aligned Bounding Box
struct AABB {
glm::vec3 a {0.0f};
glm::vec3 b {1.0f};
glm::vec3 b {1.0f, 1.0f, 1.0f};
AABB() {}
AABB(glm::vec3 size) : a(0.0f), b(size) {
}
AABB(glm::vec3 pos, glm::vec3 size) : a(pos), b(size) {
}
/// @brief Get AABB point with minimal x,y,z
inline glm::vec3 min() const {
return glm::min(a, b);
@@ -59,6 +62,44 @@ struct AABB {
return !(pos.x < p.x || pos.y < p.y || pos.z < p.z ||
pos.x >= p.x+s.x || pos.y >= p.y+s.y || pos.z >= p.z+s.z);
}
void fix() {
auto beg = min();
auto end = max();
a = beg;
b = end;
}
inline void addPoint(glm::vec3 p) {
a = glm::min(a, p);
b = glm::max(b, p);
}
/// TODO: optimize
void transform(const glm::mat4& matrix) {
auto pa = a;
auto pb = b;
a = matrix * glm::vec4(a, 1.0f);
b = matrix * glm::vec4(b, 1.0f);
fix();
addPoint(matrix * glm::vec4(pb.x, pa.y, pa.z, 1.0f));
addPoint(matrix * glm::vec4(pb.x, pb.y, pa.z, 1.0f));
addPoint(matrix * glm::vec4(pb.x, pb.y, pb.z, 1.0f));
addPoint(matrix * glm::vec4(pa.x, pb.y, pa.z, 1.0f));
addPoint(matrix * glm::vec4(pa.x, pa.y, pb.z, 1.0f));
addPoint(matrix * glm::vec4(pb.x, pa.y, pb.z, 1.0f));
}
inline bool intersect(const AABB& aabb) {
return (
a.x <= aabb.b.x &&
b.x >= aabb.a.x &&
a.y <= aabb.b.y &&
b.y >= aabb.a.y &&
a.z <= aabb.b.z &&
b.z >= aabb.a.z
);
}
};
#endif // MATHS_AABB_HPP_