ReflectionModel.h

Go to the documentation of this file.
00001 /* $Id: ReflectionModel.h,v 1.1 2002/12/05 15:08:03 cvs Exp $ */
00002 
00003 #ifndef __REFLECTION_MODEL_H
00004 #define __REFLECTION_MODEL_H
00005 
00006 #include <gra/GRAObject.h>
00007 #include <esg/brdf/DiffuseBRDF.h>
00008 #include <esg/brdf/SpecularBRDF.h>
00009 #include <esg/emittance/Emittance.h>
00010 #include <esg/visitor/MatVisitor.h>
00011 #include <esg/Definitions.h>
00012 #include <esg/SceneGraphObject.h>
00013 #include <gra/scene/Scene.h>
00014 
00015 /*
00016  * Generic class for Kajyia's rendering equation estimators.
00017  *
00018  * BRDF and Emittance are common for all points of single surface (shape).
00019  * They are therefore maintained by separate set of methods and they are NOT
00020  * inspected for individial objects of illuminatePoint() function
00021  *
00022  * Protocol:
00023  *   reflection.setScene(scene);
00024  *   for each shape in scene {
00025  *      reflection.setBRDF(brdf);
00026  *      [ reflection.setEmittance(emittance); ]
00027  *      for each surface point {
00028  *         reflection.illuminatePoint(...);
00029  *      }
00030  *   }
00031  */
00032 
00033 using namespace esg;
00034 
00035 namespace gra {
00036     
00037 class GRA_EXPORT ReflectionModel : public GRAObject {
00038 protected:
00039     DiffuseBRDF  * _pDiffuseBRDF;
00040     SpecularBRDF * _pSpecularBRDF;
00041     Emittance    * _pEmittance;
00042     Scene        * _pScene;
00043 
00044 public:
00045     ReflectionModel (DiffuseBRDF  * db = NULL,
00046                      SpecularBRDF * sb = NULL,
00047                      Emittance    *  e = NULL)
00048         : _pDiffuseBRDF(db),
00049           _pSpecularBRDF(sb),
00050           _pEmittance(e),
00051           _pScene(NULL) {}
00052     
00053     virtual ~ReflectionModel () {}
00054 
00055     virtual void setDiffuseBRDF  (DiffuseBRDF  * b) { _pDiffuseBRDF  = b; }
00056     virtual void setSpecularBRDF (SpecularBRDF * b) { _pSpecularBRDF = b; }
00057     virtual void setEmittance    (Emittance    * e) { _pEmittance    = e; }
00058     virtual void setScene        (Scene        * s) { _pScene        = s; }
00059 
00060     virtual Color3f* illuminatePoint(PointEnv& /* point of interest  */) = 0;
00061 };
00062     
00063 } // namespace
00064 
00065 #endif // __REFLECTION_MODEL_H

Generated on Tue Nov 21 15:11:42 2006 for gra by  doxygen 1.4.6