ephysics/tools/testbed/common/PerlinNoise.h

45 lines
1.4 KiB
C
Raw Permalink Normal View History

2017-05-11 00:40:27 +00:00
#ifndef PERLIN_NOISE_H
#define PERLIN_NOISE_H
/// Class PerlinNoise
/// Code from http://stackoverflow.com/questions/4753055/perlin-noise-generation-for-terrain
class PerlinNoise {
2017-06-08 22:35:22 +02:00
public:
2017-05-11 00:40:27 +00:00
2017-06-08 22:35:22 +02:00
// Constructor
PerlinNoise();
PerlinNoise(double _persistence, double _frequency, double _amplitude, int32_t _octaves, int32_t _randomseed);
2017-05-11 00:40:27 +00:00
2017-06-08 22:35:22 +02:00
// Get Height
double GetHeight(double x, double y) const;
2017-05-11 00:40:27 +00:00
2017-06-08 22:35:22 +02:00
// Get
double Persistence() const { return persistence; }
double Frequency() const { return frequency; }
double Amplitude() const { return amplitude; }
int32_t Octaves() const { return octaves; }
int32_t RandomSeed() const { return randomseed; }
2017-05-11 00:40:27 +00:00
2017-06-08 22:35:22 +02:00
// Set
void Set(double _persistence, double _frequency, double _amplitude, int32_t _octaves, int32_t _randomseed);
2017-05-11 00:40:27 +00:00
2017-06-08 22:35:22 +02:00
void SetPersistence(double _persistence) { persistence = _persistence; }
void SetFrequency( double _frequency) { frequency = _frequency; }
void SetAmplitude( double _amplitude) { amplitude = _amplitude; }
void SetOctaves( int32_t _octaves) { octaves = _octaves; }
void SetRandomSeed( int32_t _randomseed) { randomseed = _randomseed; }
2017-05-11 00:40:27 +00:00
2017-06-08 22:35:22 +02:00
private:
2017-05-11 00:40:27 +00:00
2017-06-08 22:35:22 +02:00
double Total(double i, double j) const;
double GetValue(double x, double y) const;
double Interpolate(double x, double y, double a) const;
double Noise(int32_t x, int32_t y) const;
2017-05-11 00:40:27 +00:00
2017-06-08 22:35:22 +02:00
double persistence, frequency, amplitude;
int32_t octaves, randomseed;
2017-05-11 00:40:27 +00:00
};
#endif