GLM AABB
Axis aligned bounding box built on GLM
|
00001 #ifndef IAUNS_GLM_AABB_HPP 00002 #define IAUNS_GLM_AABB_HPP 00003 00004 #include <glm/glm.hpp> 00005 00006 namespace CPM_GLM_AABB_NS { 00007 00009 class AABB 00010 { 00011 public: 00013 AABB(); 00014 00018 AABB(const glm::vec3& center, glm::float_t radius); 00019 00021 AABB(const glm::vec3& p1, const glm::vec3& p2); 00022 00023 AABB(const AABB& aabb); 00024 ~AABB(); 00025 00027 void setNull() {mMin = glm::vec3(1.0); mMax = glm::vec3(-1.0);} 00028 00030 bool isNull() const {return mMin.x > mMax.x || mMin.y > mMax.y || mMin.z > mMax.z;} 00031 00033 void extend(glm::float_t val); 00034 00036 void extend(const glm::vec3& p); 00037 00042 void extend(const glm::vec3& center, glm::float_t radius); 00043 00045 void extend(const AABB& aabb); 00046 00050 void extendDisk(const glm::vec3& center, const glm::vec3& normal, 00051 glm::float_t radius); 00052 00054 void translate(const glm::vec3& v); 00055 00060 void scale(const glm::vec3& scale, const glm::vec3& origin); 00061 00063 glm::vec3 getCenter() const; 00064 00067 glm::vec3 getDiagonal() const; 00068 00071 glm::float_t getLongestEdge() const; 00072 00075 glm::float_t getShortestEdge() const; 00076 00078 glm::vec3 getMin() const {return mMin;} 00079 00081 glm::vec3 getMax() const {return mMax;} 00082 00085 bool overlaps(const AABB& bb) const; 00086 00088 enum INTERSECTION_TYPE { INSIDE, INTERSECT, OUTSIDE }; 00091 INTERSECTION_TYPE intersect(const AABB& bb) const; 00092 00099 bool isSimilarTo(const AABB& b, glm::float_t diff = 0.5) const; 00100 00101 private: 00102 00103 glm::vec3 mMin; 00104 glm::vec3 mMax; 00105 }; 00106 00107 } // namespace CPM_GLM_AABB_NS 00108 00109 #endif