blob: 48070fe9a0078b3d91c10c1981592f0d0e739538 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include "core/pch.hh"
#include "core/aabb.hh"
AABB::AABB(const glm::fvec3 &min, const glm::fvec3 &max)
{
set_bounds(min, max);
}
void AABB::set_bounds(const glm::fvec3 &min, const glm::fvec3 &max)
{
this->min = min;
this->max = max;
}
void AABB::set_offset(const glm::fvec3 &base, const glm::fvec3 &size)
{
this->min = base;
this->max = base + size;
}
bool AABB::contains(const glm::fvec3 &point) const
{
if((point.x < min.x) || (point.x > max.x))
return false;
if((point.y < min.y) || (point.y > max.y))
return false;
if((point.z < min.z) || (point.z > max.z))
return false;
return true;
}
bool AABB::intersect(const AABB &other_box) const
{
if((min.x >= other_box.max.x) || (max.x <= other_box.min.x))
return false;
if((min.y >= other_box.max.y) || (max.y <= other_box.min.y))
return false;
if((min.z >= other_box.max.z) || (max.z <= other_box.min.z))
return false;
return true;
}
AABB AABB::combine_with(const AABB &other_box) const
{
AABB result;
result.set_bounds(min, other_box.max);
return result;
}
AABB AABB::multiply_with(const AABB &other_box) const
{
AABB result;
result.set_bounds(other_box.min, max);
return result;
}
AABB AABB::push(const glm::fvec3 &vector) const
{
AABB result;
result.set_bounds(min + vector, max + vector);
return result;
}
|