fixed bounding volume issue
[laserbrain_demo] / src / geom.h
index f28f878..5db1996 100644 (file)
@@ -12,7 +12,8 @@ enum GeomObjectType {
        GOBJ_SPHERE,
        GOBJ_AABOX,
        GOBJ_BOX,
-       GOBJ_PLANE
+       GOBJ_PLANE,
+       GOBJ_DISC
 };
 
 class GeomObject;
@@ -33,6 +34,9 @@ public:
        GeomObject();
        virtual ~GeomObject();
 
+       virtual bool valid() const;
+       virtual void invalidate();
+
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const = 0;
        virtual bool contains(const Vec3 &pt) const = 0;
 
@@ -48,6 +52,9 @@ public:
        Sphere();
        Sphere(const Vec3 &center, float radius);
 
+       virtual bool valid() const;
+       virtual void invalidate();
+
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
        virtual bool contains(const Vec3 &pt) const;
 
@@ -62,6 +69,9 @@ public:
        AABox();
        AABox(const Vec3 &min, const Vec3 &max);
 
+       virtual bool valid() const;
+       virtual void invalidate();
+
        virtual Vec3 get_corner(int idx) const;
 
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
@@ -82,6 +92,8 @@ public:
        Box(const Vec3 &pos, const Vec3 &vi, const Vec3 &vj, const Vec3 &vk);
        Box(const Vec3 *varr, int vcount);
 
+       virtual void invalidate();
+
        virtual Vec3 get_corner(int idx) const;
 
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
@@ -116,6 +128,9 @@ public:
        Disc(const Vec3 &pt, const Vec3 &normal, float rad);
        Disc(const Vec3 &normal, float dist, float rad);
 
+       virtual bool valid() const;
+       virtual void invalidate();
+
        virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
        //! true if the projection of pt to the plane is contained within the disc radius
        virtual bool contains(const Vec3 &pt) const;