00001 #ifndef MATERIAL_H 00002 #define MATERIAL_H 00003 00004 #include "raytrace_defs.h" 00005 00016 00017 class Material { 00018 00019 public: 00020 00022 virtual ~Material() { 00023 }; 00024 00027 virtual Magick::Color get_color(const Point3D& intersection_point) const =0; 00028 00034 virtual Magick::Color get_color(const Point3D& intersection_point, const Renderable * const obj) const { 00035 return get_color(intersection_point); 00036 }; 00037 00043 virtual bool is_light(const Point3D& intersection_point) const =0; 00044 00049 virtual void set_is_light(bool v) =0; 00050 00054 virtual double get_diffuse(const Point3D& intersection_point) const =0; 00055 00058 virtual void set_diffuse(double diffuse) =0; 00059 00063 virtual double get_reflection(const Point3D& intersection_point) const =0; 00064 00068 virtual double get_reflectivity(const Point3D& intersection_point) const =0; 00069 00075 virtual double get_refraction_index(const Point3D& intersection_point) const =0; 00076 00080 virtual double get_opacity(const Point3D& intersection_point) const =0; 00081 00086 virtual void set_opacity(double opacity) =0; 00087 00088 #if 0 00089 00090 Stub out of specular methods 00091 00096 virtual double get_specular_coeffiecient() = 0; 00097 00104 virtual double get_specular_power() = 0; 00105 #endif 00106 00107 00108 }; 00109 00110 #endif