3 #include <unordered_set>
14 friend class boost::serialization::access;
21 template <
typename Archive>
22 void serialize(Archive& ar,
const unsigned int version) {
23 boost::serialization::void_cast_register<AABB, Primitive>();
24 ar & boost::serialization::base_object<Primitive>(*
this);
56 AABB(glm::dvec3 min, glm::dvec3 max);
76 AABB(glm::dvec3(ax, ay, az), glm::dvec3(bx, by, bz))
126 const glm::dvec3& rayOrigin,
127 const glm::dvec3& rayDir,
128 const glm::dvec3& intersectionPoint
134 const glm::dvec3& rayOrigin,
135 const glm::dvec3& rayDir
141 const glm::dvec3& rayOrigin,
142 const glm::dvec3& rayDir
159 std::vector<Primitive*> & primitives
167 std::vector<Vertex> & verts
175 std::unordered_set<Vertex *, VertexKeyHash, VertexKeyEqual> & verts
195 namespace serialization {
197 template<
class Archive>
198 inline void save_construct_data(
199 Archive & ar,
const AABB * t,
const unsigned int file_version)
206 template<
class Archive>
207 inline void load_construct_data(
208 Archive & ar,
AABB * t,
const unsigned int file_version)
216 ::new(t)
AABB(min, max);
Class representing an Axis Aligned Bounding Box (AABB)
Definition: AABB.h:10
~AABB() override=default
Default destructor for axis aligned bounding box.
std::vector< double > getRayIntersection(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir) override
Definition: AABB.cpp:157
void serialize(Archive &ar, const unsigned int version)
Serialize an axis-aligned bounding box to a stream of bytes.
Definition: AABB.h:22
glm::dvec3 const & getMax() const
Get the max value for each coordinate of the axis aligned bounding box.
Definition: AABB.h:109
Vertex * getVertices() override
Definition: AABB.cpp:218
static std::shared_ptr< AABB > getForVertices(std::vector< Vertex > &verts)
Build an axis aligned bounding box containing given vertices.
Vertex vertices[2]
Vertices defining the axis aligned bounding box.
Definition: AABB.h:38
AABB()=default
Default constructor for axis aligned bounding box.
void update() override
Definition: AABB.h:180
static std::shared_ptr< AABB > getForPrimitives(std::vector< Primitive * > &primitives)
Build an axis aligned bounding box containing given primitives.
Definition: AABB.cpp:44
glm::dvec3 getSize()
Obtain size along each axis for the axis aligned bounding box.
Definition: AABB.cpp:40
glm::dvec3 const & getMin() const
Get the min value for each coordinate of the axis aligned bounding box.
Definition: AABB.h:103
AABB * getAABB() override
Obtain this axis aligned bounding box.
Definition: AABB.cpp:214
std::string toString()
Bbuild a string representing the axis aligned bounding box.
Definition: AABB.cpp:153
void _clone(Primitive *p) override
Assist clone function.
Definition: AABB.cpp:23
glm::dvec3 getCentroid() override
Get the centroid of the axis aligned bounding box.
Definition: AABB.cpp:35
AABB(double const ax, double const ay, double const az, double const bx, double const by, double const bz)
Build an axis aligned bounding box through given points and which are the minimum and maximum verte...
Definition: AABB.h:68
Primitive * clone() override
Generate a clone of the primitive.
Definition: AABB.cpp:17
double getRayIntersectionDistance(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir) override
Definition: AABB.cpp:186
double getIncidenceAngle_rad(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir, const glm::dvec3 &intersectionPoint) override
Definition: AABB.cpp:222
size_t getNumVertices() override
Definition: AABB.h:147
glm::dvec3 bounds[2]
Cached bounds to speed-up intersection computation.
Definition: AABB.h:42
Abstract class defining the common behavior for all primitives.
Definition: Primitive.h:24
Class representing a vertex.
Definition: Vertex.h:14
glm::dvec3 pos
Vertex 3D position.
Definition: Vertex.h:39