00001 00005 #ifndef Primitive_h 00006 #define Primitive_h 00007 00008 #include "Object.h" 00009 class Material; 00010 class Point; 00011 class Vector; 00012 00013 class Primitive : public Object { 00014 public: 00015 00016 Primitive(Material* matl); 00017 virtual ~Primitive(); 00018 00023 virtual void preprocess(); 00024 00028 virtual void intersect(HitRecord& hit, const RenderContext& context, const Ray& ray) const = 0; 00029 00034 virtual void normal(Vector& normal, const RenderContext& context, 00035 const Point& hitpos, const Ray& ray, const HitRecord& hit) const = 0; 00036 00040 virtual void computeUVW(Vector& uvw, const RenderContext& context, 00041 const Ray& ray, const HitRecord& hit) const; 00042 00043 protected: 00044 Material* matl; 00045 00046 private: 00047 Primitive(const Primitive&); 00048 Primitive& operator=(const Primitive&); 00049 }; 00050 00051 00052 #endif 00053