00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "lux.h"
00025 #include "texture.h"
00026 #include "frequencyspd.h"
00027 #include "paramset.h"
00028
00029 namespace lux
00030 {
00031
00032
00033 template <class T>
00034 class FrequencyFloatTexture : public Texture<T> {
00035 public:
00036
00037 FrequencyFloatTexture(const T &v) { value = v; }
00038 virtual ~FrequencyFloatTexture() { }
00039 virtual T Evaluate(const TsPack *tspack, const DifferentialGeometry &) const {
00040 return value;
00041 }
00042 private:
00043 T value;
00044 };
00045
00046 template <class T>
00047 class FrequencySpectrumTexture : public Texture<T> {
00048 public:
00049
00050 FrequencySpectrumTexture(const float &w, const float &p, const float &r) {
00051 FSPD = new FrequencySPD(w, p, r);
00052 }
00053 virtual ~FrequencySpectrumTexture() { delete FSPD; }
00054 virtual T Evaluate(const TsPack *tspack, const DifferentialGeometry &) const {
00055 return SWCSpectrum(tspack, FSPD);
00056 }
00057 virtual void SetPower(float power, float area) {
00058 FSPD->Scale(power / (area * M_PI * FSPD->Y()));
00059 }
00060 private:
00061 FrequencySPD* FSPD;
00062 };
00063
00064 class FrequencyTexture
00065 {
00066 public:
00067 static Texture<float> * CreateFloatTexture(const Transform &tex2world, const TextureParams &tp);
00068 static Texture<SWCSpectrum> * CreateSWCSpectrumTexture(const Transform &tex2world, const TextureParams &tp);
00069 };
00070
00071 }
00072