00001 #ifndef WALLMATERIAL_H_ 00002 #define WALLMATERIAL_H_ 00003 00004 #include "Material.h" 00005 #include "../textures/PerlinNoise.h" 00006 #include "../bxdf/Lambertian.h" 00007 #include "BSDFMaterial.h" 00008 00009 namespace rcrt 00010 { 00011 00012 class WallMaterial : public rcrt::Material 00013 { 00014 private: 00015 BSDFMaterial mat; 00016 float density; 00017 public: 00018 WallMaterial(BSDF b, const float& dens); 00019 virtual ~WallMaterial(); 00020 00021 virtual RGBColor sample(const Vec3D& wOut, const Vec3D& wInc, Intersection& is); 00022 virtual RGBColor sampleDiffuse(const Vec3D& wOut, const Vec3D& wInc, Intersection& is); 00023 virtual RGBColor sampleSpecular(const Vec3D& wOut, const Vec3D& wInc, Intersection& is); 00024 virtual RGBColor getEmitted(const Vec3D& wOut, Intersection& is); 00025 virtual ScatterEvent scatterPhoton(Intersection& is, Photon* photon); 00026 00027 virtual bool refracts() const; 00028 virtual bool hasDiffuse() const; 00029 virtual bool hasSpecular() const; 00030 virtual bool hasTransmissive() const; 00031 00032 void distortNormal(Intersection& is) const; 00033 00034 Vec3D calcDistNormal(Intersection& is) const; 00035 00036 Vec3D getShadingNormal(Intersection& is) const; 00037 }; 00038 00039 } 00040 00041 #endif /*WALLMATERIAL_H_*/