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 "paramset.h"
00027 #include "error.h"
00028
00029 namespace lux
00030 {
00031
00032
00033 class BilerpFloatTexture : public Texture<float> {
00034 public:
00035
00036 BilerpFloatTexture(TextureMapping2D *m,
00037 const float &t00, const float &t01,
00038 const float &t10, const float &t11) {
00039 mapping = m;
00040 v00 = t00;
00041 v01 = t01;
00042 v10 = t10;
00043 v11 = t11;
00044 }
00045 virtual ~BilerpFloatTexture() {
00046 delete mapping;
00047 }
00048 virtual float Evaluate(const TsPack *tspack, const DifferentialGeometry &dg) const {
00049 float s, t, dsdx, dtdx, dsdy, dtdy;
00050 mapping->Map(dg, &s, &t, &dsdx, &dtdx, &dsdy, &dtdy);
00051 return (1-s)*(1-t) * v00 +
00052 (1-s)*( t) * v01 +
00053 ( s)*(1-t) * v10 +
00054 ( s)*( t) * v11;
00055 }
00056
00057 static Texture<float> * CreateFloatTexture(const Transform &tex2world, const TextureParams &tp);
00058
00059 private:
00060
00061 TextureMapping2D *mapping;
00062 float v00, v01, v10, v11;
00063 };
00064
00065 class BilerpSpectrumTexture : public Texture<SWCSpectrum> {
00066 public:
00067
00068 BilerpSpectrumTexture(TextureMapping2D *m,
00069 const RGBColor &t00, const RGBColor &t01,
00070 const RGBColor &t10, const RGBColor &t11) {
00071 mapping = m;
00072 v00 = t00;
00073 v01 = t01;
00074 v10 = t10;
00075 v11 = t11;
00076 }
00077 virtual ~BilerpSpectrumTexture() {
00078 delete mapping;
00079 }
00080 virtual SWCSpectrum Evaluate(const TsPack *tspack, const DifferentialGeometry &dg) const {
00081 float s, t, dsdx, dtdx, dsdy, dtdy;
00082 mapping->Map(dg, &s, &t, &dsdx, &dtdx, &dsdy, &dtdy);
00083 return SWCSpectrum(tspack, (1-s)*(1-t) * v00 +
00084 (1-s)*( t) * v01 +
00085 ( s)*(1-t) * v10 +
00086 ( s)*( t) * v11 );
00087 }
00088
00089 static Texture<SWCSpectrum> * CreateSWCSpectrumTexture(const Transform &tex2world, const TextureParams &tp);
00090
00091 private:
00092
00093 TextureMapping2D *mapping;
00094 RGBColor v00, v01, v10, v11;
00095 };
00096
00097 }
00098