The spica renderer
fresnel.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_FRESNEL_H_
6 #define _SPICA_FRESNEL_H_
7 
8 #include "../core/common.h"
9 #include "../core/spectrum.h"
10 
11 namespace spica {
12 
16 class SPICA_EXPORTS Fresnel {
17 public:
18  virtual ~Fresnel() {}
19  virtual Spectrum evaluate(double cosThetaI) const = 0;
20 };
21 
25 class SPICA_EXPORTS FresnelConductor : public Fresnel {
26 public:
27  FresnelConductor(const Spectrum& etaI, const Spectrum& etaT,
28  const Spectrum& k);
29  Spectrum evaluate(double cosThetaI) const override;
30 
31 private:
32  Spectrum etaI_, etaT_, k_;
33 };
34 
38 class SPICA_EXPORTS FresnelDielectric : public Fresnel {
39 public:
40  FresnelDielectric(double etaI, double etaT);
41  Spectrum evaluate(double cosThetaI) const override;
42 
43 private:
44  double etaI_, etaT_;
45 };
46 
50 class SPICA_EXPORTS FresnelNoOp : public Fresnel {
51 public:
52  FresnelNoOp() {}
53  Spectrum evaluate(double cosThetaI) const override {
54  return Spectrum(1.0);
55  }
56 };
57 
58 // -----------------------------------------------------------------------------
59 // Fresnel utility functions
60 // -----------------------------------------------------------------------------
61 
62 SPICA_EXPORTS Spectrum FrConductor(double cosThetaI, const Spectrum& etaI,
63  const Spectrum& etaT, const Spectrum& k);
64 SPICA_EXPORTS double FrDielectric(double cosThetaI, double etaI, double etaT);
65 
66 SPICA_EXPORTS double FrDiffuseReflectance(double eta);
67 
68 } // namespace spica
69 
70 #endif // _SPICA_FRESNEL_H_
Fresnel dielectric class.
Definition: fresnel.h:38
RGB spectrum.
Definition: spectrum.h:18
Fresnel conductor class.
Definition: fresnel.h:25
The inteface for Fresnel reflections.
Definition: fresnel.h:16
Dammy Fresnel class which returns always one.
Definition: fresnel.h:50