X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FAabb.hh;h=b43e194784df06c96892f11d8b7129fe8fef4587;hp=f66fb24fe6595f60d76a25f9498d38596aabe6c4;hb=29e3d45f7bbbf31eadf793c41ff2b3d9c47b7539;hpb=16d1a05b0777e97a45c48e2874aa4e5cc791282e;ds=sidebyside diff --git a/src/Moof/Aabb.hh b/src/Moof/Aabb.hh index f66fb24..b43e194 100644 --- a/src/Moof/Aabb.hh +++ b/src/Moof/Aabb.hh @@ -1,5 +1,5 @@ -/****************************************************************************** +/******************************************************************************* Copyright (c) 2009, Charles McGarvey All rights reserved. @@ -24,11 +24,12 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -******************************************************************************/ +*******************************************************************************/ #ifndef _MOOF_AABB_HH_ #define _MOOF_AABB_HH_ +#include #include @@ -39,21 +40,70 @@ namespace Mf { * Axis-aligned Bounding Box */ -struct Aabb +struct Aabb : public Drawable { - Aabb() {} + Vector3 min; + Vector3 max; - Aabb(const Vector3& minPoint, const Vector3& maxPoint) : - min(minPoint), - max(maxPoint) {} - Aabb (Scalar minX, Scalar minY, Scalar minZ, - Scalar maxX, Scalar maxY, Scalar maxZ) : - min(minX, minY, minZ), - max(maxX, maxY, maxZ) {} + Aabb() {} - Vector3 min; - Vector3 max; + Aabb(const Vector3& a, const Vector3& b) + { + init(a, b); + } + + Aabb(Scalar ax, Scalar ay, Scalar az, + Scalar bx, Scalar by, Scalar bz) + { + Vector3 a(ax, ay, az); + Vector3 b(bx, by, bz); + + init(a, b); + } + + inline void init(const Vector3& a, const Vector3& b) + { + if (a[0] < b[0]) + { + min[0] = a[0]; + max[0] = b[0]; + } + else + { + min[0] = b[0]; + max[0] = a[0]; + } + if (a[1] < b[1]) + { + min[1] = a[1]; + max[1] = b[1]; + } + else + { + min[1] = b[1]; + max[1] = a[1]; + } + if (a[2] < b[2]) + { + min[2] = a[2]; + max[2] = b[2]; + } + else + { + min[2] = b[2]; + max[2] = a[2]; + } + } + + inline Vector3 getCenter() const + { + return Vector3((min[0] + max[0]) / 2.0, + (min[1] + max[1]) / 2.0, + (min[2] + max[2]) / 2.0); + } + + void draw(Scalar alpha) const; };