noise-tool: add simple gradient heightmap colours

This commit is contained in:
Danny Robson 2015-06-02 23:00:12 +10:00
parent ecbf774d4a
commit 34406dc244

View File

@ -12,7 +12,7 @@
#include "noise/basis/worley.hpp"
#include "noise/turbulence.hpp"
#include "extent.hpp"
#include "colour.hpp"
template struct util::noise::fractal::fbm<float, util::noise::basis::perlin<float,util::lerp::cubic>>;
template struct util::noise::fractal::hmf<float, util::noise::basis::value<float,util::lerp::cubic>>;
@ -45,6 +45,7 @@ main (void)
#else
util::noise::turbulence<
float,
//util::noise::fractal::hetero<float, util::noise::basis::worley<float>>,
util::noise::fractal::hetero<float, util::noise::basis::perlin<float,util::lerp::cubic>>,
util::noise::fractal::fbm<float, util::noise::basis::perlin<float,util::lerp::quintic>>
> b (seed, { 0.13f, 0.13f });
@ -56,7 +57,7 @@ main (void)
b.perturb[1].frequency (10.f / size.w);
#endif
// generate the values. offset positions slightly to avoid simple axis issues with perlin basis
// generate the values. offset positions slightly to observe simple axis issues with perlin basis
{
auto offset = util::vector2f { -100 };
@ -75,7 +76,45 @@ main (void)
std::transform (img.begin (), img.end (), img.begin (), [offset,div] (auto i) { return (i - offset) / div; });
// create colour data
static const struct {
float scale;
util::colour3u value;
} GRADPOINT[] = {
{ 0 / 32.f, { 0, 0, 128 } },
{ 12 / 32.f, { 0, 0, 255 } },
{ 16 / 32.f, { 0, 128, 255 } },
{ 17 / 32.f, { 240, 240, 64 } },
{ 18 / 32.f, { 32, 160, 0 } },
{ 22 / 32.f, { 224, 224, 0 } },
{ 28 / 32.f, { 128, 128, 128 } },
{ 32 / 32.f, { 255, 255, 255 } },
{ 32 / 32.f, { 255, 255, 255 } }
};
std::unique_ptr<uint8_t[]> coloured (new uint8_t[size.area () * 3]);
for (size_t i = 0; i < size.area (); ++i) {
auto v = img.data ()[i] + +8/32.f;
auto c0 = std::lower_bound (std::begin (GRADPOINT),
std::end (GRADPOINT),
v,
[] (auto a, auto b) { return a.scale < b; });
auto c1 = c0+1;
auto c = (
(c0->value.template cast<float> () +
c1->value.template cast<float> ()
) / 2.f
).template cast<uint8_t> ();
coloured[i*3+0] = c[0];
coloured[i*3+1] = c[1];
coloured[i*3+2] = c[2];
}
util::ppm::write (coloured.get (), size.w, size.h, size.w*3, "noise.ppm");
// write the image to disk
auto grey = img.clone<uint8_t> ();
util::pgm::write (grey, "noise.ppm");
util::pgm::write (grey, "noise.pgm");
}