Jitter sampling algorithm testing, small graphics do not see any significant difference between the code and the test chart or bar.
Class declaration:
#pragma once #ifndef __JITTERED_HEADER__ #define __JITTERED_HEADER__ #include "sampler.h" class Jittered:public Sampler { public: Jittered(); ~Jittered(); Jittered(const integer samps); Jittered(const integer samps, const integer sets); Jittered(const Jittered& ji); Jittered& operator=(const Jittered& ji); virtual Sampler* clone() const; virtual void generate_samples(); }; #endif
Class implementation:
#include "pch.h" #include "jittered.h" Jittered::Jittered() :Sampler() { generate_samples(); } Jittered::~Jittered() {} Jittered::Jittered(const integer samps) : Sampler(samps) { generate_samples(); } Jittered::Jittered(const integer samps, const integer sets) : Sampler(samps, sets) { generate_samples(); } Jittered::Jittered(const Jittered& ji) : Sampler(ji) { generate_samples(); } Jittered& Jittered::operator=(const Jittered& ji) { if (this == &ji) return *this; Sampler::operator=(ji); return *this; } Sampler* Jittered::clone() const { return new Jittered(*this); } void Jittered::generate_samples() { integer n = (integer)std::sqrt((ldouble)nsamples); for (integer p = 0; p < nsets; p++) { for (integer i = 0; i < n; i++) for (integer j = 0; j < n; j++) { Point2 sp ((j + random_ldouble ()) / n, (i + random_ldouble ()) / n); // dither algorithm core samples.push_back(sp); } } }
Test results chart: