00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef LUX_FRESNEL_H
00024 #define LUX_FRESNEL_H
00025
00026 #include "lux.h"
00027 #include "spectrum.h"
00028
00029 namespace lux
00030 {
00031
00032 class Fresnel {
00033 public:
00034
00035 virtual ~Fresnel();
00036 virtual void Evaluate(const TsPack *tspack, float cosi, SWCSpectrum *const f) const = 0;
00037 virtual float Index(const TsPack *tspack) const = 0;
00038 };
00039
00040 void FrDiel(float cosi, float cost,
00041 const SWCSpectrum &etai, const SWCSpectrum &etat, SWCSpectrum *const f);
00042 void FrDiel2(float cosi, const SWCSpectrum &cost, const SWCSpectrum &eta, SWCSpectrum *f);
00043 void FrCond(float cosi, const SWCSpectrum &n, const SWCSpectrum &k, SWCSpectrum *const f);
00044 void FrFull(float cosi, const SWCSpectrum &cost, const SWCSpectrum &n, const SWCSpectrum &k, SWCSpectrum *const f);
00045 SWCSpectrum FresnelApproxEta(const SWCSpectrum &intensity);
00046 SWCSpectrum FresnelApproxK(const SWCSpectrum &intensity);
00047
00048 }
00049
00050 #endif // LUX_FRESNEL_H
00051