00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "pbrt.h"
00026 #include "texture.h"
00027 #include "paramset.h"
00028
00029 template <class T1, class T2>
00030 class ScaleTexture : public Texture<T2> {
00031 public:
00032
00033 ScaleTexture(Reference<Texture<T1> > t1,
00034 Reference<Texture<T2> > t2) {
00035 tex1 = t1;
00036 tex2 = t2;
00037 }
00038 T2 Evaluate(
00039 const DifferentialGeometry &dg) const {
00040 return tex1->Evaluate(dg) * tex2->Evaluate(dg);
00041 }
00042 private:
00043 Reference<Texture<T1> > tex1;
00044 Reference<Texture<T2> > tex2;
00045 };
00046
00047 extern "C" DLLEXPORT Texture<float> * CreateFloatTexture(const Transform &tex2world,
00048 const TextureParams &tp) {
00049 return new ScaleTexture<float, float>(tp.GetFloatTexture("tex1", 1.f),
00050 tp.GetFloatTexture("tex2", 1.f));
00051 }
00052
00053 extern "C" DLLEXPORT Texture<Spectrum> * CreateSpectrumTexture(const Transform &tex2world,
00054 const TextureParams &tp) {
00055 return new ScaleTexture<Spectrum, Spectrum>(
00056 tp.GetSpectrumTexture("tex1", Spectrum(1.f)),
00057 tp.GetSpectrumTexture("tex2", Spectrum(1.f)));
00058 }