#ifndef CG1_TRACER_WORLEYNOISE_H #define CG1_TRACER_WORLEYNOISE_H #include #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 points; // 3D-Array, each cell represents a subcell. There are numberOfPoints^3 subcells. std::uniform_real_distribution distribution; std::mt19937 generator; Vector3d getRandomPoint(); float distanceToClosestPoint(Vector3d point); void generateNoise(); std::vector getSubcellPoints(Vector3d point); static void runWorleyNoiseInThread(int xOffset, int xSize, WorleyNoise *noise); }; #endif //CG1_TRACER_WORLEYNOISE_H