LambertianBRDF.h

Go to the documentation of this file.
00001 /* $Id: LambertianBRDF.h,v 1.1 2002/12/05 15:02:18 cvs Exp $ */
00002 
00003 #ifndef __LAMBERTIAN_BRDF_H
00004 #define __LAMBERTIAN_BRDF_H
00005 
00006 #include <esg/Definitions.h>
00007 #include <esg/visitor/MatVisitor.h>
00008 #include <esg/brdf/DiffuseBRDF.h>
00009 #include <esg/geometry/Hemisphere.h>
00010 
00011 namespace esg {
00012 
00019 class OGSCENE_EXPORT LambertianBRDF : public DiffuseBRDF {
00020 protected:
00021         virtual void _duplicate_attributes (const BRDF& src) {
00022             DiffuseBRDF::_duplicate_attributes(src);
00023         }
00024         
00025 public:
00029         LambertianBRDF (void) : DiffuseBRDF(true) {}
00030 
00041         virtual RetVal reflectance(const MatVisitor& visitor,
00042                                    const Vector3*    L,
00043                                    const Vector3*    V,  
00044                                    const Vector3*    N,
00045                                    Vector3&          color) {
00046             color.set(visitor.diffuse());
00047             return NONZERO_CONTRIB;
00048         }
00049 
00063         virtual RetVal reflectanceVNL(const MatVisitor& visitor,
00064                                       const Vector3*    L,
00065                                       const Vector3*    V,  
00066                                       const Vector3*    N,
00067                                       double            NV,
00068                                       double            NL,
00069                                       Vector3&          color) {
00070             color.set(visitor.diffuse());
00071             return NONZERO_CONTRIB;
00072         }
00073 
00086         virtual RetVal reflectanceNL(const MatVisitor& visitor,
00087                                      const Vector3*    L,
00088                                      const Vector3*    V,  
00089                                      const Vector3*    N,
00090                                      double            NL,
00091                                      Vector3&          color) {
00092             color.set(visitor.diffuse());
00093             return NONZERO_CONTRIB;
00094         }
00095 
00096         virtual BRDF* clone (void) const { return new LambertianBRDF(); }
00097 
00106         virtual double albedo (const MatVisitor& visitor,
00107                                const Vector3&    N,
00108                                const Vector3*    V) const {
00109             return visitor.avgDiffuse() / PI;
00110         }
00111 
00127         virtual void importanceSample(const MatVisitor& visitor,
00128                                       const Vector3&    D,
00129                                       double            r1,
00130                                       double            r2,
00131                                       Vector3&          dir,
00132                                       double*           pPDFVal) {
00133             Hemisphere hemisphere(D);
00134             dir.set(hemisphere.sampleUniformly(r1, r2, pPDFVal));
00135         }
00136 
00150         virtual Vector2 dir2uv (const MatVisitor& visitor,
00151                                 const Vector3&    N,
00152                                 const Vector3&    D) const {
00153             Hemisphere h(N);
00154             return h.dir2uvUniformly(D);
00155         }
00156 };
00157 
00158 }; // namespace
00159 
00160 #endif // ___LAMBERTIAN_BRDF_H

Generated on Wed Jun 28 12:24:28 2006 for esg by  doxygen 1.4.6