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_FRESNELDIELECTRIC_H
00024 #define LUX_FRESNELDIELECTRIC_H
00025
00026 #include "lux.h"
00027 #include "fresnel.h"
00028
00029 namespace lux
00030 {
00031
00032 class FresnelDielectric : public Fresnel {
00033 public:
00034
00035 FresnelDielectric(float ei, float et, float cB = 0.f) {
00036 eta_t = et / ei;
00037 cb = cB * 1e6f / ei;
00038 }
00039 virtual ~FresnelDielectric() { }
00040 virtual void Evaluate(const TsPack *tspack, float cosi, SWCSpectrum *const f) const;
00041 virtual float Index(const TsPack *tspack) const;
00042 private:
00043
00044 float eta_t, cb;
00045 };
00046
00047 class FresnelDielectricComplement : public FresnelDielectric {
00048 public:
00049 FresnelDielectricComplement(float ei, float et, float cB = 0.f) :
00050 FresnelDielectric(ei, et, cB) {}
00051 virtual ~FresnelDielectricComplement() { }
00052 virtual void Evaluate(const TsPack *tspack, float cosi, SWCSpectrum *const f) const {
00053 FresnelDielectric::Evaluate(tspack, cosi, f);
00054 *f = SWCSpectrum(1.f) - *f;
00055 }
00056 };
00057
00058 }
00059
00060 #endif // LUX_FRESNELDIELECTRIC_H
00061