00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #if defined(_MSC_VER)
00025 #pragma once
00026 #endif
00027
00028 #ifndef PBRT_TEXTURES_BILERP_H
00029 #define PBRT_TEXTURES_BILERP_H
00030
00031
00032 #include "pbrt.h"
00033 #include "texture.h"
00034 #include "paramset.h"
00035
00036
00037 template <typename T> class BilerpTexture : public Texture<T> {
00038 public:
00039
00040 BilerpTexture(TextureMapping2D *m, const T &t00, const T &t01,
00041 const T &t10, const T &t11)
00042 : mapping(m), v00(t00), v01(t01), v10(t10), v11(t11) {
00043 }
00044 ~BilerpTexture() {
00045 delete mapping;
00046 }
00047 T Evaluate(const DifferentialGeometry &dg) const {
00048 float s, t, dsdx, dtdx, dsdy, dtdy;
00049 mapping->Map(dg, &s, &t, &dsdx, &dtdx, &dsdy, &dtdy);
00050 return (1-s)*(1-t) * v00 + (1-s)*( t) * v01 +
00051 ( s)*(1-t) * v10 + ( s)*( t) * v11;
00052 }
00053 private:
00054
00055 TextureMapping2D *mapping;
00056 T v00, v01, v10, v11;
00057 };
00058
00059
00060 BilerpTexture<float> *CreateBilerpFloatTexture(const Transform &tex2world,
00061 const TextureParams &tp);
00062 BilerpTexture<Spectrum> *CreateBilerpSpectrumTexture(const Transform &tex2world,
00063 const TextureParams &tp);
00064
00065 #endif // PBRT_TEXTURES_BILERP_H