51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
|
/**
|
||
|
Open Simple Noise for C++
|
||
|
|
||
|
Port to C++ from https://gist.github.com/KdotJPG/b1270127455a94ac5d19
|
||
|
by Rickard Lundberg, 2019.
|
||
|
*/
|
||
|
#ifndef _OPENSIMPLEX_H__
|
||
|
#define _OPENSIMPLEX_H__
|
||
|
|
||
|
#include <cstdint>
|
||
|
#include <array>
|
||
|
|
||
|
namespace OpenSimplexNoise
|
||
|
{
|
||
|
class Noise
|
||
|
{
|
||
|
public:
|
||
|
Noise();
|
||
|
Noise(int64_t seed);
|
||
|
//2D Open Simplex Noise.
|
||
|
double eval(const double x, const double y) const;
|
||
|
//3D Open Simplex Noise.
|
||
|
double eval(double x, double y, double z) const;
|
||
|
//4D Open Simplex Noise.
|
||
|
double eval(double x, double y, double z, double w) const;
|
||
|
private:
|
||
|
const double m_stretch2d;
|
||
|
const double m_squish2d;
|
||
|
const double m_stretch3d;
|
||
|
const double m_squish3d;
|
||
|
const double m_stretch4d;
|
||
|
const double m_squish4d;
|
||
|
|
||
|
const double m_norm2d;
|
||
|
const double m_norm3d;
|
||
|
const double m_norm4d;
|
||
|
|
||
|
const long m_defaultSeed;
|
||
|
|
||
|
std::array<short, 256> m_perm;
|
||
|
std::array<short, 256> m_permGradIndex3d;
|
||
|
std::array<char, 16> m_gradients2d;
|
||
|
std::array<char, 72> m_gradients3d;
|
||
|
std::array<char, 256> m_gradients4d;
|
||
|
double extrapolate(int xsb, int ysb, double dx, double dy) const;
|
||
|
double extrapolate(int xsb, int ysb, int zsb, double dx, double dy, double dz) const;
|
||
|
double extrapolate(int xsb, int ysb, int zsb, int wsb, double dx, double dy, double dz, double dw) const;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#endif // _OPENSIMPLEX_H__
|