00001 00005 #ifndef Material_h 00006 #define Material_h 00007 00008 class Color; 00009 class HitRecord; 00010 class Ray; 00011 class RenderContext; 00012 00013 class Material { 00014 public: 00015 Material(); 00016 virtual ~Material(); 00017 00018 virtual void preprocess(); 00019 virtual void shade(Color& result, const RenderContext& context, const Ray& ray, 00020 const HitRecord& hit, const Color& atten, int depth) const = 0; 00021 00022 private: 00023 Material(const Material&); 00024 Material& operator=(const Material&); 00025 }; 00026 00027 #endif 00028