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_SAMPLERS_ADAPTIVE_H
00029 #define PBRT_SAMPLERS_ADAPTIVE_H
00030
00031
00032 #include "pbrt.h"
00033 #include "sampler.h"
00034
00035
00036 class AdaptiveSampler : public Sampler {
00037 public:
00038
00039 AdaptiveSampler(int xstart, int xend, int ystart, int yend,
00040 int minSamples, int maxSamples, const string &method,
00041 float sopen, float sclose);
00042 Sampler *GetSubSampler(int num, int count);
00043 ~AdaptiveSampler();
00044 int RoundSize(int size) const {
00045 return RoundUpPow2(size);
00046 }
00047 int MaximumSampleCount() { return maxSamples; }
00048 int GetMoreSamples(Sample *sample, RNG &rng);
00049 bool ReportResults(Sample *samples, const RayDifferential *rays,
00050 const Spectrum *Ls, const Intersection *isects, int count);
00051 private:
00052
00053 bool needsSupersampling(Sample *samples, const RayDifferential *rays,
00054 const Spectrum *Ls, const Intersection *isects, int count);
00055
00056
00057 int xPos, yPos;
00058 int minSamples, maxSamples;
00059 float *sampleBuf;
00060 enum AdaptiveTest { ADAPTIVE_COMPARE_SHAPE_ID,
00061 ADAPTIVE_CONTRAST_THRESHOLD };
00062 AdaptiveTest method;
00063 bool supersamplePixel;
00064 };
00065
00066
00067 AdaptiveSampler *CreateAdaptiveSampler(const ParamSet ¶ms, const Film *film,
00068 const Camera *camera);
00069
00070 #endif // PBRT_SAMPLERS_ADAPTIVE_H