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_FILTERS_SINC_H
00029 #define PBRT_FILTERS_SINC_H
00030
00031
00032 #include "filter.h"
00033
00034
00035 class LanczosSincFilter : public Filter {
00036 public:
00037
00038 LanczosSincFilter(float xw, float yw, float t)
00039 : Filter(xw, yw), tau(t) { }
00040 float Evaluate(float x, float y) const;
00041 float Sinc1D(float x) const {
00042 x = fabsf(x);
00043 if (x < 1e-5) return 1.f;
00044 if (x > 1.) return 0.f;
00045 x *= M_PI;
00046 float sinc = sinf(x * tau) / (x * tau);
00047 float lanczos = sinf(x) / x;
00048 return sinc * lanczos;
00049 }
00050 private:
00051 const float tau;
00052 };
00053
00054
00055 LanczosSincFilter *CreateSincFilter(const ParamSet &ps);
00056
00057 #endif // PBRT_FILTERS_SINC_H