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 T>
00030 class MixTexture : public Texture<T> {
00031 public:
00032
00033 MixTexture(Reference<Texture<T> > t1,
00034 Reference<Texture<T> > t2,
00035 Reference<Texture<float> > amt) {
00036 tex1 = t1;
00037 tex2 = t2;
00038 amount = amt;
00039 }
00040 T Evaluate(const DifferentialGeometry &dg) const {
00041 T t1 = tex1->Evaluate(dg), t2 = tex2->Evaluate(dg);
00042 float amt = amount->Evaluate(dg);
00043 return (1.f - amt) * t1 + amt * t2;
00044 }
00045 private:
00046 Reference<Texture<T> > tex1, tex2;
00047 Reference<Texture<float> > amount;
00048 };
00049
00050 extern "C" DLLEXPORT Texture<float> * CreateFloatTexture(const Transform &tex2world,
00051 const TextureParams &tp) {
00052 return new MixTexture<float>(
00053 tp.GetFloatTexture("tex1", 0.f),
00054 tp.GetFloatTexture("tex2", 1.f),
00055 tp.GetFloatTexture("amount", 0.5f));
00056 }
00057
00058 extern "C" DLLEXPORT Texture<Spectrum> * CreateSpectrumTexture(const Transform &tex2world,
00059 const TextureParams &tp) {
00060 return new MixTexture<Spectrum>(
00061 tp.GetSpectrumTexture("tex1", 0.f),
00062 tp.GetSpectrumTexture("tex2", 1.f),
00063 tp.GetFloatTexture("amount", 0.5f));
00064 }