42 static inline double grad(
int hash,
double x,
double y,
double z)
47 double u =
h < 8 ? x : y;
56 else if (
h == 12 ||
h == 14 )
63 return ((
h&1) == 0 ?
u : -
u)+((
h&2) == 0 ? v : -v);
66 static inline double fade(
double t)
72 return t * t * t * (t * (t * 6 - 15) + 10);
75 static double lerp(
double a,
double b,
double x)
77 return a + x * (
b -
a);
83 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225,
84 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148,
85 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32,
86 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175,
87 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122,
88 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54,
89 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169,
90 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64,
91 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212,
92 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213,
93 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9,
94 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104,
95 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241,
96 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157,
97 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93,
98 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180
113 for (
i = 0;
i < 512;
i++) {
118 uint8_t random_permutations[256];
125 for (
i = 0;
i < 256;
i++) {
126 random_permutations[
i] =
i;
129 for (
i = 0;
i < 256;
i++) {
130 unsigned int random_idx =
av_lfg_get(&lfg) % (256-
i);
131 uint8_t random_val = random_permutations[random_idx];
132 random_permutations[random_idx] = random_permutations[255-
i];
148 int aaa, aba, aab, abb, baa, bba, bab, bbb;
149 double x1, x2, y1, y2;
153 x = fmod(x, perlin->
period);
154 y = fmod(y, perlin->
period);
155 z = fmod(z, perlin->
period);
174 aaa = p[p[p[
xi ] + yi ] + zi ];
192 grad(bba,
xf-1, yf-1, zf),
194 y1 =
lerp(x1, x2, v);
197 grad(bab,
xf-1, yf , zf-1),
200 grad(bbb,
xf-1, yf-1, zf-1),
202 y2 =
lerp(x1, x2, v);
205 return (
lerp(y1, y2,
w) + 1) / 2;
211 double frequency = 1;
212 double amplitude = 1;
213 double max_value = 0;
216 total +=
perlin_get(perlin, x * frequency, y * frequency, z * frequency) * amplitude;
217 max_value += amplitude;
222 return total / max_value;