00001 #ifndef BSDF_H_ 00002 #define BSDF_H_ 00003 00004 #include <vector> 00005 #include "BXDF.h" 00006 00007 namespace rcrt 00008 { 00009 00013 class BSDF 00014 { 00015 private: 00016 std::vector<BXDF*> bxdfs; 00017 00018 public: 00019 BSDF(); 00020 virtual ~BSDF(); 00021 00024 RGBColor eval(const Vec3D& wOut, const Vec3D& wInc, const Vec3D& gNormal, const Vec3D& sNormal) const; 00025 00028 RGBColor evalDiffuse(const Vec3D& wOut, const Vec3D& wInc, const Vec3D& gNormal, const Vec3D& sNormal) const; 00029 00032 RGBColor evalSpecular(const Vec3D& wOut, const Vec3D& wInc, const Vec3D& gNormal, const Vec3D& sNormal) const; 00033 00034 bool hasDiffuse() const; 00035 bool hasSpecular() const; 00036 bool hasTransmissive() const; 00037 00038 RGBColor getKdiffuse() const; 00039 RGBColor getKspecular() const; 00040 RGBColor getKtransmit() const; 00041 00042 void addBXDF(BXDF* bxdf); 00043 00044 00045 }; 00046 00047 } 00048 00049 #endif /*BSDF_H_*/