00001
00002
00003 #ifndef __SPECULAR_BRDF_H
00004 #define __SPECULAR_BRDF_H
00005
00006 #include <esg/brdf/BRDF.h>
00007 #include <esg/visitor/MatVisitor.h>
00008 #include <esg/Export>
00009
00010 namespace esg {
00011
00016 class OGSCENE_EXPORT SpecularBRDF : public BRDF {
00017 protected:
00018 virtual void _duplicate_attributes (const BRDF& src) {
00019 BRDF::_duplicate_attributes(src);
00020 }
00021
00022 public:
00029 SpecularBRDF (bool isotropic) : BRDF(false, isotropic) {}
00030
00031 virtual RetVal reflectance(const MatVisitor& visitor,
00032 const Vector3* L,
00033 const Vector3* V,
00034 const Vector3* N,
00035 Vector3& color) = 0;
00036
00037 virtual RetVal reflectanceVNL(const MatVisitor& visitor,
00038 const Vector3* L,
00039 const Vector3* V,
00040 const Vector3* N,
00041 double NV,
00042 double NL,
00043 Vector3& color) = 0;
00044
00045 virtual RetVal reflectanceNL(const MatVisitor& visitor,
00046 const Vector3* L,
00047 const Vector3* V,
00048 const Vector3* N,
00049 double NL,
00050 Vector3& color) = 0;
00051
00052 virtual BRDF* clone () const = 0;
00053
00054 virtual double albedo (const MatVisitor& visitor,
00055 const Vector3& N,
00056 const Vector3* V) const = 0;
00057
00058 virtual void importanceSample(const MatVisitor& visitor,
00059 const Vector3& D,
00060 double r1,
00061 double r2,
00062 Vector3& dir,
00063 double* pPDFVal) = 0;
00064
00065 virtual Vector2 dir2uv (const MatVisitor& visitor,
00066 const Vector3& N,
00067 const Vector3& D) const = 0;
00068
00069
00070 };
00071
00072 };
00073
00074 #endif // __SPECULAR_BRDF_H