#include "image.hpp" #include "noise.hpp" #include "noise/lerp.hpp" #include "extent.hpp" int main (void) { // setup the output buffer util::extent2u size (1920, 1080); util::image::buffer img (size); // setup the noise generator //util::noise::fbm> b; //util::noise::rmf> b; //util::noise::hmf> b; util::noise::hetero> b; //b.octaves = 3; b.frequency = 10.f / size.w; b.lacunarity = 2; b.basis.seed = time (NULL); // generate the values. offset positions slightly to avoid simple axis issues with perlin basis for (size_t y = 0; y < size.h; ++y) for (size_t x = 0; x < size.w; ++x) { auto v = b ({float(x + 20), float(y + 20)}); img.data ()[y * size.w + x] = v; } // rescale into the range [0, 1] auto range = std::minmax_element (img.begin (), img.end ()); auto offset = *range.first; auto div = *range.second - *range.first; std::cerr << "range: [" << *range.first << ", " << *range.second << "]\n"; std::transform (img.begin (), img.end (), img.begin (), [offset,div] (auto i) { return (i - offset) / div; }); // write the image to disk auto grey = img.clone (); util::pgm::write (grey, "noise.ppm"); }