15 min(DBL_MAX, DBL_MAX, DBL_MAX),
16 max(-DBL_MAX, -DBL_MAX, -DBL_MAX),
49 void Update(
float x,
float y,
float z)
74template <
typename Vec3>
76 using Number =
typename Vec3::element_type;
82 return AABB{ Vec3(DBL_MAX, DBL_MAX, DBL_MAX), Vec3(-DBL_MAX, -DBL_MAX, -DBL_MAX) };
90 this->max =
max(this->max, rhs.
max);
91 this->min =
min(this->min, rhs.
min);
99 this->max =
max(this->max, point);
100 this->min =
min(this->min, point);
108 Vec3 l1 = (this->min - start) * inv_dir;
109 Vec3 l2 = (this->max - start) * inv_dir;
111 Vec3 vmin =
min(l1, l2);
112 Vec3 vmax =
max(l1, l2);
114 double lmin =
max(vmin.x,
max(vmin.y, vmin.z));
115 double lmax =
min(vmax.x,
min(vmax.y, vmax.z));
117 return ((lmax >= 0.f) & (lmax >= lmin) & (lmin < dist));
120 auto IsIn(Vec3 point)
const {
return point >=
min && point <=
max; }
T Dot(const vector3 &b) const
Definition: vector3.h:129
T y
Definition: vector3.h:20
T x
Definition: vector3.h:20
T Length() const
Definition: vector3.h:130
T z
Definition: vector3.h:20
void Update(const AABB &rhs)
Definition: Aabb.h:85
Vec3 min
Definition: Aabb.h:78
auto Intersects(const AABB &rhs) const
Definition: Aabb.h:121
static AABB Invalid()
Definition: Aabb.h:80
void Update(const Vec3 &point)
Definition: Aabb.h:94
typename Vec3::element_type Number
Definition: Aabb.h:76
Vec3 max
Definition: Aabb.h:78
auto IntersectsRay(const Vec3 &start, const Vec3 &inv_dir, Number dist) const
Definition: Aabb.h:103
auto IsIn(Vec3 point) const
Definition: Aabb.h:120
vector3d max
Definition: Aabb.h:12
Aabb(const vector3d &_min, const vector3d &_max, float rad)
Definition: Aabb.h:22
void Update(const Aabb &b)
Definition: Aabb.h:28
Aabb()
Definition: Aabb.h:14
vector3d min
Definition: Aabb.h:12
double GetRadius() const
Definition: Aabb.h:70
void Update(float x, float y, float z)
Definition: Aabb.h:49
bool IsIn(const vector3< T > &p) const
Definition: Aabb.h:59
bool Intersects(const Aabb &o) const
Definition: Aabb.h:65
double radius
Definition: Aabb.h:13
void Update(const vector3d &p)
Definition: Aabb.h:39