BRDF.h

Go to the documentation of this file.
00001 /* $Id: BRDF.h,v 1.1 2002/12/05 15:02:18 cvs Exp $ */
00002 
00003 #ifndef __BRDF_H
00004 #define __BRDF_H
00005 
00006 #include <esg/Definitions.h>
00007 #include <esg/ESGObject.h>
00008 #include <esg/visitor/MatVisitor.h>
00009 #include <esg/Export>
00010 
00011 namespace esg {
00012 
00017 class OGSCENE_EXPORT BRDF : public ESGObject {
00018 public:
00022         enum RetVal {
00023             NONZERO_CONTRIB   = 1, 
00024             BAD_PARAMS        = 2, 
00025             NL_NEGATIVE       = 3, 
00026             NV_NEGATIVE       = 4, 
00027             NL_OR_NV_NEGATIVE = 5, 
00028             ZERO_CONTRIB      = 6  
00029         };
00030 
00031 protected:
00032         bool _isDiffuse;
00033         bool _isIsotropic;
00034 
00035 protected:
00036         virtual void _duplicate_attributes (const BRDF& src) {
00037             _isDiffuse   = src._isDiffuse;
00038             _isIsotropic = src._isIsotropic;
00039         }
00040     
00041 public:
00050         BRDF (bool diffuse, bool isotropic)
00051             : _isDiffuse(diffuse), _isIsotropic(isotropic) {}
00052 
00056         virtual ~BRDF() {}
00057 
00061         bool diffuse (void) const { return _isDiffuse; }
00062 
00066         bool specular (void) const { return ! _isDiffuse; }
00067 
00073         bool isotropic (void) const { return _isIsotropic; }
00074 
00080         bool anisotropic (void) const { return ! _isIsotropic; }
00081 
00092         virtual RetVal reflectance(const MatVisitor& visitor,
00093                                    const Vector3*    L,
00094                                    const Vector3*    V,
00095                                    const Vector3*    N,
00096                                    Vector3&          color) = 0;
00097 
00111         virtual RetVal reflectanceVNL(const MatVisitor& visitor,
00112                                       const Vector3*    L,
00113                                       const Vector3*    V,
00114                                       const Vector3*    N,
00115                                       double            NV,
00116                                       double            NL,
00117                                       Vector3&          color) = 0;
00118 
00131         virtual RetVal reflectanceNL(const MatVisitor& visitor,
00132                                      const Vector3*    L,
00133                                      const Vector3*    V,
00134                                      const Vector3*    N,
00135                                      double            NL,
00136                                      Vector3&          color) = 0;
00137 
00141         virtual BRDF* clone () const = 0;
00142 
00151         virtual double albedo (const MatVisitor& visitor,
00152                                const Vector3&    N,
00153                                const Vector3*    V) const = 0;
00154 
00173         virtual void importanceSample(const MatVisitor& visitor,
00174                                       const Vector3&    D,
00175                                       double            r1,
00176                                       double            r2,
00177                                       Vector3&          dir,
00178                                       double*           pPDFVal) = 0;
00179 
00191         virtual Vector2 dir2uv (const MatVisitor& visitor,
00192                                 const Vector3&    N,
00193                                 const Vector3&    D) const = 0;
00194 
00195 
00196         // Vector3* stratifiedSamples(unsigned /* # subdomains */);
00197 };
00198 
00199 }; // namespace
00200 
00201 #endif // __BRDF_H

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