00001 #ifndef BXDF_H_ 00002 #define BXDF_H_ 00003 00004 #include "BXDFType.h" 00005 #include "../RGBColor.h" 00006 #include "../math/Vec3D.h" 00007 #include "../Intersection.h" 00008 00009 namespace rcrt 00010 { 00011 00017 class BXDF 00018 { 00019 protected: 00020 RGBColor ks; //specular coefficient 00021 RGBColor kd; //diffuse coefficient 00022 RGBColor kt; //transmitted coefficient 00023 00024 public: 00025 BXDF(const RGBColor& s, const RGBColor& d, const RGBColor& t, const BXDFType& bt); 00026 virtual ~BXDF(); 00027 00028 virtual RGBColor eval(const Vec3D& wOut, const Vec3D& wInc, const Vec3D& normal) const =0; 00029 virtual RGBColor evalDiffuse(const Vec3D& wOut, const Vec3D& wInc, const Vec3D& normal) const =0; 00030 virtual RGBColor evalSpecular(const Vec3D& wOut, const Vec3D& wInc, const Vec3D& normal) const =0; 00031 00032 virtual bool specular() const =0; 00033 virtual bool glossy() const =0; 00034 virtual bool diffuse() const =0; 00035 virtual bool fresnel() const =0; 00036 00037 const RGBColor& getKs() const; 00038 const RGBColor& getKd() const; 00039 const RGBColor& getKt() const; 00040 const BXDFType type; 00041 }; 00042 00043 } 00044 00045 #endif /*BXDF_H_*/