forked from Cubitect/cubiomes
-
Notifications
You must be signed in to change notification settings - Fork 2
/
noise.h
68 lines (50 loc) · 1.46 KB
/
noise.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#ifndef NOISE_H_
#define NOISE_H_
#include "rng.h"
STRUCT(PerlinNoise)
{
uint8_t d[512];
double a, b, c;
double amplitude;
double lacunarity;
};
STRUCT(OctaveNoise)
{
int octcnt;
PerlinNoise *octaves;
};
STRUCT(DoublePerlinNoise)
{
double amplitude;
OctaveNoise octA;
OctaveNoise octB;
};
#ifdef __cplusplus
extern "C"
{
#endif
/// Helper
double maintainPrecision(double x);
/// Perlin noise
void perlinInit(PerlinNoise *noise, uint64_t *seed);
void xPerlinInit(PerlinNoise *noise, Xoroshiro *xr);
double samplePerlin(const PerlinNoise *noise, double x, double y, double z,
double yamp, double ymin);
double sampleSimplex2D(const PerlinNoise *noise, double x, double y);
/// Perlin Octaves
void octaveInit(OctaveNoise *noise, uint64_t *seed, PerlinNoise *octaves,
int omin, int len);
int xOctaveInit(OctaveNoise *noise, Xoroshiro *xr, PerlinNoise *octaves,
const double *amplitudes, int omin, int len);
double sampleOctave(const OctaveNoise *noise, double x, double y, double z);
/// Double Perlin
void doublePerlinInit(DoublePerlinNoise *noise, uint64_t *seed,
PerlinNoise *octavesA, PerlinNoise *octavesB, int omin, int len);
int xDoublePerlinInit(DoublePerlinNoise *noise, Xoroshiro *xr,
PerlinNoise *octaves, const double *amplitudes, int omin, int len);
double sampleDoublePerlin(const DoublePerlinNoise *noise,
double x, double y, double z);
#ifdef __cplusplus
}
#endif
#endif /* NOISE_H_ */