00001 #include "MirrorMaterial.h" 00002 00003 namespace rcrt 00004 { 00005 00006 MirrorMaterial::MirrorMaterial(const RGBColor& refl):reflectivity(refl) 00007 { 00008 } 00009 00010 MirrorMaterial::~MirrorMaterial() 00011 { 00012 } 00013 00014 RGBColor MirrorMaterial::sample(const Vec3D& wOut, const Vec3D& wInc, 00015 Intersection& is) 00016 { 00017 return 0; 00018 } 00019 00020 bool MirrorMaterial::hasDiffuse() const 00021 { 00022 return false; 00023 } 00024 00025 bool MirrorMaterial::hasSpecular() const 00026 { 00027 return true; 00028 } 00029 00030 bool MirrorMaterial::hasTransmissive() const 00031 { 00032 return false; 00033 } 00034 00035 RGBColor MirrorMaterial::getEmitted(const Vec3D& wOut, Intersection& is) 00036 { 00037 return 0; 00038 } 00039 00040 RGBColor MirrorMaterial::sampleDiffuse(const Vec3D& wOut, const Vec3D& wInc, Intersection& is) 00041 { 00042 return 0; 00043 } 00044 00045 RGBColor MirrorMaterial::sampleSpecular(const Vec3D& wOut, const Vec3D& wInc, Intersection& is) 00046 { 00047 return reflectivity; 00048 } 00049 00050 bool MirrorMaterial::refracts() const 00051 { 00052 return false; 00053 } 00054 00055 ScatterEvent MirrorMaterial::scatterPhoton(Intersection& is, Photon* photon) 00056 { 00057 photon->setDir(photon->getDir().reflect(is.getSNormalW())); 00058 photon->setPos(is.getPosition()); 00059 photon->scalePower(reflectivity); 00060 return SPECULAR; 00061 } 00062 00063 00064 }