X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fgeom.h;h=f9b88e5514590d81b44ab603b2412bf3e05d7aed;hp=5db1996d09c5743d4a4fa59debaa7db5dc18ee7c;hb=6ecd4ecfa020964e4250bf9322c1a26ac4073b76;hpb=794a378d5c8e07c815814324da8142be137406d0 diff --git a/src/geom.h b/src/geom.h index 5db1996..f9b88e5 100644 --- a/src/geom.h +++ b/src/geom.h @@ -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_