00001 #include <esg/emittance/PointEmittance.h> 00002 00003 using namespace esg; 00004 00005 Sphere PointEmittance::_stochasticEmitter = Sphere(0., 0., 0., 1.); 00006 00007 Emittance* PointEmittance::clone() const { 00008 PointEmittance * pRet = new PointEmittance(); 00009 pRet->_duplicate_attributes(*this); 00010 return pRet; 00011 } 00012 00013 bool PointEmittance::intensity(const Vector3& v, Color3f& c) const 00014 { 00015 Vector3 dir(v - _location); 00016 float d = dir.length(); 00017 c.set(_intensity); 00018 ESG_ATTENUATION(d, c); 00019 return true; 00020 } 00021 00022 bool PointEmittance::intensity(const Vector3&, float d, Color3f& c) const 00023 { 00024 c.set(_intensity); 00025 ESG_ATTENUATION(d, c); 00026 return true; 00027 } 00028 00029 bool PointEmittance::stochasticEmission(Vector3& d) 00030 { 00031 PointEnv pe; 00032 _stochasticEmitter.randomSample(ENV_WANT_SURFACE_POINT, pe, NULL); 00033 if (!(pe.mask & ENV_HAVE_SURFACE_POINT)) return false; 00034 d.set(pe.intersection); 00035 return true; 00036 }