hand-tracking and exhibits part one
[laserbrain_demo] / src / geom.h
index 5db1996..f9b88e5 100644 (file)
@@ -40,8 +40,11 @@ public:
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const = 0;
        virtual bool contains(const Vec3 &pt) const = 0;
 
-       virtual float distance(const Vec3 &v) const = 0;
-       virtual float signed_distance(const Vec3 &v) const = 0;
+       virtual float distance(const Vec3 &v) const;
+       virtual float signed_distance(const Vec3 &v) const;
+
+       virtual float distance_sq(const Vec3 &v) const = 0;
+       virtual float signed_distance_sq(const Vec3 &v) const = 0;
 };
 
 class Sphere : public GeomObject {
@@ -58,8 +61,8 @@ public:
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
        virtual bool contains(const Vec3 &pt) const;
 
-       virtual float distance(const Vec3 &v) const;
-       virtual float signed_distance(const Vec3 &v) const;
+       virtual float distance_sq(const Vec3 &v) const;
+       virtual float signed_distance_sq(const Vec3 &v) const;
 };
 
 class AABox : public GeomObject {
@@ -77,8 +80,8 @@ public:
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
        virtual bool contains(const Vec3 &pt) const;
 
-       virtual float distance(const Vec3 &v) const;
-       virtual float signed_distance(const Vec3 &v) const;
+       virtual float distance_sq(const Vec3 &v) const;
+       virtual float signed_distance_sq(const Vec3 &v) const;
 };
 
 class Box : public AABox {
@@ -99,8 +102,8 @@ public:
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
        virtual bool contains(const Vec3 &pt) const;
 
-       virtual float distance(const Vec3 &v) const;
-       virtual float signed_distance(const Vec3 &v) const;
+       virtual float distance_sq(const Vec3 &v) const;
+       virtual float signed_distance_sq(const Vec3 &v) const;
 };
 
 
@@ -118,6 +121,9 @@ public:
 
        virtual float distance(const Vec3 &v) const;
        virtual float signed_distance(const Vec3 &v) const;
+
+       virtual float distance_sq(const Vec3 &v) const;
+       virtual float signed_distance_sq(const Vec3 &v) const;
 };
 
 class Disc : public Plane {
@@ -135,8 +141,8 @@ public:
        //! true if the projection of pt to the plane is contained within the disc radius
        virtual bool contains(const Vec3 &pt) const;
 
-       virtual float distance(const Vec3 &v) const;
-       virtual float signed_distance(const Vec3 &v) const;
+       virtual float distance_sq(const Vec3 &v) const;
+       virtual float signed_distance_sq(const Vec3 &v) const;
 };
 
 //! project point to plane
@@ -177,4 +183,7 @@ bool intersect_plane_sphere(Sphere *result, const Plane &p, const Sphere &s);
 //! calculate the intersection of two axis-aligned bounding boxes
 bool intersect_aabox_aabox(AABox *res, const AABox &a, const AABox &b);
 
+//! determine if a sphere and an axis-aligned box collide
+bool collision_sphere_aabox(const Sphere &s, const AABox &b);
+
 #endif // GEOMOBJ_H_