add triggers
This commit is contained in:
+42
-1
@@ -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_
|
||||
|
||||
Reference in New Issue
Block a user