00001 00006 #ifndef Ring_h 00007 #define Ring_h 00008 00009 #include "Vector.h" 00010 #include "Primitive.h" 00011 class HitRecord; 00012 class Point; 00013 class RenderContext; 00014 00019 class Ring : public Primitive { 00020 public: 00021 Ring(Material* material, const Point ¢er, const Vector& n, const double r1, const double r2 = 0.0); 00022 virtual ~Ring(); 00023 00024 virtual void getBounds(BoundingBox& bbox) const; 00025 virtual void intersect(HitRecord& hit, const RenderContext& context, const Ray& ray) const; 00026 virtual void normal(Vector& normal, const RenderContext& context, 00027 const Point & hitpos, const Ray& ray, const HitRecord& hit) const; 00028 00029 private: 00030 Ring(const Ring&); 00031 Ring& operator=(const Ring&); 00032 00033 Point center; 00034 Vector norm; 00035 double r1Sq; 00036 double r2Sq; 00037 double radius1; 00038 double radius2; 00039 00040 double d; 00041 }; 00042 00043 #endif 00044