inline unsigned int operator()(const TPoint3D &aNormal) const { double lambertianIntensity = std::max(aNormal.dot(myLightSourceDirection), 0.0); double alpha = acos(((myLightSourceDirection+Z3i::RealPoint(0,0,1.0))/2.0).dot(aNormal/aNormal.norm())); double specularIntensity = exp(-alpha*alpha/(2.0*mySigma)); double resu = myKld*lambertianIntensity+myKls*specularIntensity; resu = std::max(resu, 0.0); resu = std::min(resu, 1.0); return resu*std::numeric_limits<typename TImage2D::Value>::max(); }
inline unsigned int operator()(const TPoint3D &aNormal, const Z2i::Point &aPoint, const double h) const { TPoint3D l; Z3i::RealPoint posL (aPoint[0], aPoint[1], h); l = -posL+myLightSourcePosition; l /= l.norm(); int intensity = aNormal.dot(l)*std::numeric_limits<typename TImage2D::Value>::max(); return intensity>0? intensity:0; }
inline unsigned int operator()(const TPoint3D &aNormal, const Z2i::Point &aPoint, const double h) const { TPoint3D l; Z3i::RealPoint posL (aPoint[0], aPoint[1], h); l = -posL+myLightSourcePosition; l /= l.norm(); double lambertianIntensity = std::max(aNormal.dot(l), 0.0); double alpha = acos(((l+Z3i::RealPoint(0,0,1.0))/2.0).dot(aNormal/aNormal.norm())); double specularIntensity = exp(-alpha*alpha/(2.0*mySigma)); double resu = myKld*lambertianIntensity+myKls*specularIntensity; resu = std::max(resu, 0.0); resu = std::min(resu, 1.0); return resu*std::numeric_limits<typename TImage2D::Value>::max(); }
inline unsigned int operator()(const TPoint3D &aNormal) const { int intensity = aNormal.dot(myLightSourceDirection)*std::numeric_limits<typename TImage2D::Value>::max(); return intensity>0? intensity:0; }