cloudy-raytracer/common/noise/perlinnoise.h

40 lines
847 B
C
Raw Normal View History

#ifndef CG1_TRACER_PERLINNOISE_H
#define CG1_TRACER_PERLINNOISE_H
#include "noise.h"
2023-01-24 06:26:24 +01:00
// Stolen from https://en.wikipedia.org/wiki/Perlin_noise
class PerlinNoise : public Noise
{
public:
2023-01-29 12:19:19 +01:00
/**
*
* @param size
* @param gridSize
* @param seed 0 for random seed
*/
PerlinNoise(int size, int gridSize, unsigned int seed = 0);
2023-01-24 06:26:24 +01:00
void renderNoiseThread(int xOffset, int xSize);
2023-01-24 06:26:24 +01:00
private:
void generateNoise();
std::normal_distribution<float> distribution;
std::mt19937 generator;
int gridSize;
std::vector<Vector3d> gradients;
Vector3d randomGradient();
float getGradientValue(int x, int y, int z);
float getCornerValue(Vector3d position, Vector3d corner);
static void runPerlinNoiseInThread(int xOffset, int xSize, PerlinNoise *noise);
};
#endif //CG1_TRACER_PERLINNOISE_H