42 lines
1,000 B
C++
42 lines
1,000 B
C++
#ifndef CG1_TRACER_WORLEYNOISE_H
|
|
#define CG1_TRACER_WORLEYNOISE_H
|
|
|
|
|
|
#include <random>
|
|
#include "common/vector3d.h"
|
|
#include "noise.h"
|
|
|
|
// Based on: https://www.youtube.com/watch?v=4QOcCGI6xOU
|
|
class WorleyNoise : public Noise
|
|
{
|
|
public:
|
|
/**
|
|
*
|
|
* @param size
|
|
* @param numberOfPoints
|
|
* @param seed 0 for random seed
|
|
*/
|
|
WorleyNoise(int size, int numberOfPoints, unsigned int seed = 0);
|
|
|
|
void renderNoiseThread(int xOffset, int xSize);
|
|
|
|
protected:
|
|
int numberOfPoints;
|
|
std::vector<Vector3d> points; // 3D-Array, each cell represents a subcell. There are numberOfPoints^3 subcells.
|
|
|
|
std::uniform_real_distribution<float> distribution;
|
|
std::mt19937 generator;
|
|
|
|
Vector3d getRandomPoint();
|
|
|
|
float distanceToClosestPoint(Vector3d point);
|
|
|
|
void generateNoise();
|
|
|
|
std::vector<Vector3d> getSubcellPoints(Vector3d point);
|
|
|
|
static void runWorleyNoiseInThread(int xOffset, int xSize, WorleyNoise *noise);
|
|
};
|
|
|
|
|
|
#endif //CG1_TRACER_WORLEYNOISE_H
|