The spica renderer
ldsampler.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef SPICA_LDSAMPLER_H
6 #define SPICA_LDSAMPLER_H
7 
8 #include <vector>
9 
10 #include "core/cobject.h"
11 #include "core/sampler.h"
12 #include "core/random.h"
13 #include "core/point2d.h"
14 
15 namespace spica {
16 
20 class SPICA_EXPORTS LowDiscrepancySampler : public Sampler {
21 public:
22  LowDiscrepancySampler(int samplesPerPixel, int nSampledDimensions, uint32_t seed = 0);
23  explicit LowDiscrepancySampler(RenderParams &params);
25 
26  double get1D() override;
27  Point2d get2D() override;
28 
29  bool startNextSample() override;
30  void startPixel() override;
31  std::unique_ptr<Sampler> clone(uint32_t seed = 0) const override;
32 
33 private:
34  void initializeSamples();
35 
36  int samplesPerPixel_;
37  int nSampledDimensions_;
38  int currentSampleIndex_;
39  int currentSample1DDim_;
40  int currentSample2DDim_;
41  std::vector<std::vector<double>> sample1D_;
42  std::vector<std::vector<Point2d>> sample2D_;
43  Random rng_;
44 };
45 
46 SPICA_EXPORT_PLUGIN(LowDiscrepancySampler, "Low-discrepancy sampler with (0,2)-sequence.");
47 
48 } // namespace spica
49 
50 #endif // SPICA_LDSAMPLER_H
Random number generator with Mersenne twister.
Definition: random.h:17
Random sampler class.
Definition: sampler.h:24
Definition: renderparams.h:27
Definition: core.hpp:62
Low-discrepancy sampling with (0,2)-sequence.
Definition: ldsampler.h:20