diff options
author | Stijn Buys <ingar@osirion.org> | 2010-11-08 14:34:44 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2010-11-08 14:34:44 +0000 |
commit | b7dc0938eb7d59f928bbcf2a3a4877a6f60940e5 (patch) | |
tree | 5b4b4353f2012fced4180072e0b0def8ba8d22db /src/math | |
parent | b685a594ae43aa30173912c9fb1177d507ec5a08 (diff) |
moved clear() from game::Game~ to core::GameServer~ (solves FIXME),
unified bounding box code into math::BoundingBox3f class
Diffstat (limited to 'src/math')
-rw-r--r-- | src/math/Makefile.am | 20 | ||||
-rw-r--r-- | src/math/boundingbox3f.cc | 53 | ||||
-rw-r--r-- | src/math/boundingbox3f.h | 113 | ||||
-rw-r--r-- | src/math/mathlib.h | 2 |
4 files changed, 185 insertions, 3 deletions
diff --git a/src/math/Makefile.am b/src/math/Makefile.am index df180dd..d032cb4 100644 --- a/src/math/Makefile.am +++ b/src/math/Makefile.am @@ -1,11 +1,25 @@ METASOURCES = AUTO -libmath_la_SOURCES = axis.cc color.cc functions.cc matrix4f.cc vector2f.cc \ +libmath_la_SOURCES = \ + axis.cc \ + boundingbox3f.cc \ + color.cc \ + functions.cc \ + matrix4f.cc \ + vector2f.cc \ vector3f.cc + libmath_la_LDFLAGS = -avoid-version -no-undefined -lm noinst_LTLIBRARIES = libmath.la -noinst_HEADERS = axis.h color.h functions.h mathlib.h matrix4f.h vector2f.h \ - vector3f.h +noinst_HEADERS = \ + axis.h \ + boundingbox3f.h \ + color.h \ + functions.h \ + mathlib.h \ + matrix4f.h \ + vector2f.h \ + vector3f.h INCLUDES = -I$(top_srcdir)/src diff --git a/src/math/boundingbox3f.cc b/src/math/boundingbox3f.cc new file mode 100644 index 0000000..933d783 --- /dev/null +++ b/src/math/boundingbox3f.cc @@ -0,0 +1,53 @@ +/* + math/boundingbox3f.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include "math/boundingbox3f.h" + +namespace math { + +BoundingBox3f::BoundingBox3f() : + boundingbox_min(), + boundingbox_max() +{ +} + +BoundingBox3f::BoundingBox3f(const Vector3f ¢er) : + boundingbox_min(center), + boundingbox_max(center) +{ +} + +void BoundingBox3f::assign(const BoundingBox3f & other) +{ + boundingbox_min.assign(other.boundingbox_min); + boundingbox_max.assign(other.boundingbox_max); +} + +void BoundingBox3f::assign(const Vector3f ¢er) +{ + boundingbox_min.assign(center); + boundingbox_max.assign(center); +} +void BoundingBox3f::assign(const Vector3f & min, const Vector3f & max) +{ + boundingbox_min.assign(min); + boundingbox_max.assign(max); +} + +void BoundingBox3f::assign(const float min, const float max) +{ + boundingbox_min.assign(min, min, min); + boundingbox_max.assign(max, max, max); +} + +void BoundingBox3f::clear() +{ + boundingbox_min.clear(); + boundingbox_max.clear(); +} + + +} // namespace math diff --git a/src/math/boundingbox3f.h b/src/math/boundingbox3f.h new file mode 100644 index 0000000..54b846b --- /dev/null +++ b/src/math/boundingbox3f.h @@ -0,0 +1,113 @@ +/* + math/boundingbox3f.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_MATH_BOUNDINGBOX3F_H__ +#define __INCLUDED_MATH_BOUNDINGBOX3F_H__ + +#include "math/vector3f.h" + +namespace math { + +/** + * @brief a bounding box class + */ +class BoundingBox3f { +public: + BoundingBox3f(); + BoundingBox3f(const Vector3f ¢er); + + /** + * @brief returns the minimum coordinates of the bounding box + */ + inline const Vector3f & min() const { + return boundingbox_min; + } + + /** + * @brief returns the maximum coordinates of the bounding box + */ + inline const Vector3f & max() const { + return boundingbox_max; + } + + /** + * @brief test if a point is located inside the bounding box + */ + inline const bool inside(const Vector3f & point) const { + for (size_t i =0; i < 3; i++) { + if ((point[i] < boundingbox_min[i]) || (point[i] > boundingbox_max[i])) { + return false; + } + } + return true; + } + + /** + * @brief test if a point is located outside the bounding box + */ + inline const bool outside(const Vector3f & point) const { + for (size_t i =0; i < 3; i++) { + if ((point[i] < boundingbox_min[i]) || (point[i] > boundingbox_max[i])) { + return true; + } + } + return false; + } + + void assign(const BoundingBox3f & other); + + void assign(const Vector3f & min, const Vector3f & max); + + void assign(const Vector3f ¢er); + + void assign(const float min, const float max); + + void clear(); + + /** + * @brief expand the bounding box to contain a point + */ + inline void expand(const Vector3f & point) { + for (size_t i =0; i < 3; i++) { + if (point[i] < boundingbox_min[i]) { + boundingbox_min[i] = point[i]; + } + + if (point[i] > boundingbox_max[i]) { + boundingbox_max[i] = point[i]; + } + } + } + + /** + * @brief expand the bounding box to contain another bounding box + */ + inline void expand(const Vector3f & min, const Vector3f & max) { + for (size_t i =0; i < 3; i++) { + if (min[i] < boundingbox_min[i]) { + boundingbox_min[i] = min[i]; + } + + if (max[i] > boundingbox_max[i]) { + boundingbox_max[i] = max[i]; + } + } + } + + /** + * @brief expand the bounding box to contain another bounding box + */ + inline void expand(const BoundingBox3f & other) { + expand(other.boundingbox_min, other.boundingbox_max); + } + +private: + Vector3f boundingbox_min; + Vector3f boundingbox_max; +}; + +} // namespace math +#endif // __INCLUDED_MATH_BOUNDINGBOX3F_H__ diff --git a/src/math/mathlib.h b/src/math/mathlib.h index ee1e43e..b29edee 100644 --- a/src/math/mathlib.h +++ b/src/math/mathlib.h @@ -13,11 +13,13 @@ namespace math {} #include "math/axis.h" +#include "math/boundingbox3f.h" #include "math/color.h" #include "math/matrix4f.h" #include "math/functions.h" #include "math/vector2f.h" #include "math/vector3f.h" + #endif // __INCLUDED_MATH_MATHLIB_H__ |