Terminus
perlinnoise.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <random>
5 #include <map>
6 
7 #include <QVector2D>
8 
9 namespace terminus
10 {
11 
17 {
18 protected:
19  static const float fScale;
20 public:
21  PerlinNoise();
22  PerlinNoise(unsigned int seed);
23 
29  void seed(unsigned int seed);
34  unsigned int seed() const;
35 
46  float noise(int layer, float x, float y) const;
47 
51  float symmetricRnd() const;
55  float asymmetricRnd() const;
56 
57 protected:
58  float dotGradient(int layer, int iX, int iY, float x, float y) const;
59 
60  int gradientIndex(int iX, int iY) const;
61  void generateGradients(int layer) const;
62 
63  std::vector<QVector2D> & gradients(int layer) const;
64 
65 protected:
66  unsigned int m_seed;
67  mutable std::default_random_engine m_rng;
68  mutable std::uniform_real_distribution<float> m_distSym;
69  mutable std::uniform_real_distribution<float> m_distAsym;
70 
72  mutable std::map<int,std::vector<QVector2D>> m_gradientGrid;
73 };
74 
75 }//namespace terminus
unsigned int seed() const
Definition: perlinnoise.cpp:33
std::map< int, std::vector< QVector2D > > m_gradientGrid
Definition: perlinnoise.h:72
float asymmetricRnd() const
Definition: perlinnoise.cpp:64
float dotGradient(int layer, int iX, int iY, float x, float y) const
Definition: perlinnoise.cpp:69
int gradientIndex(int iX, int iY) const
Definition: perlinnoise.cpp:77
int m_gradientCount
Definition: perlinnoise.h:71
float symmetricRnd() const
Definition: perlinnoise.cpp:59
float noise(int layer, float x, float y) const
evaluates the noise function at the given coordinates
Definition: perlinnoise.cpp:38
std::uniform_real_distribution< float > m_distSym
Definition: perlinnoise.h:68
std::uniform_real_distribution< float > m_distAsym
Definition: perlinnoise.h:69
unsigned int m_seed
Definition: perlinnoise.h:66
std::default_random_engine m_rng
Definition: perlinnoise.h:67
The PerlinNoise class implements a two dimensional noise function using multiple selectable gradient ...
Definition: perlinnoise.h:16
std::vector< QVector2D > & gradients(int layer) const
Definition: perlinnoise.cpp:101
void generateGradients(int layer) const
Definition: perlinnoise.cpp:86
PerlinNoise()
Definition: perlinnoise.cpp:12
static const float fScale
Definition: perlinnoise.h:19
Definition: eventhandler.cpp:18