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