… | |
… | |
23 | #include "noise.h" |
23 | #include "noise.h" |
24 | |
24 | |
25 | ///////////////////////////////////////////////////////////////////////////// |
25 | ///////////////////////////////////////////////////////////////////////////// |
26 | |
26 | |
27 | // http://www-wales.ch.cam.ac.uk/~wales/CCD/Thomson/table.html, random permutation |
27 | // http://www-wales.ch.cam.ac.uk/~wales/CCD/Thomson/table.html, random permutation |
|
|
28 | // used as gradient vectors for noise3d |
28 | static const float charges[256][3] = { |
29 | static const float charges[256][3] = { |
29 | 6.32096444e-01, -6.11406706e-01, 4.76062943e-01, 5.19172442e-01, 8.08229585e-01, -2.77893708e-01, |
30 | 6.32096444e-01, -6.11406706e-01, 4.76062943e-01, 5.19172442e-01, 8.08229585e-01, -2.77893708e-01, |
30 | -8.81072422e-01, -4.68301230e-01, 6.63727731e-02, -1.92122323e-01, 9.81341519e-01, -7.60505942e-03, |
31 | -8.81072422e-01, -4.68301230e-01, 6.63727731e-02, -1.92122323e-01, 9.81341519e-01, -7.60505942e-03, |
31 | -2.57478265e-01, 9.34157733e-01, -2.47091628e-01, 8.75501090e-01, -1.48087600e-01, -4.59965112e-01, |
32 | -2.57478265e-01, 9.34157733e-01, -2.47091628e-01, 8.75501090e-01, -1.48087600e-01, -4.59965112e-01, |
32 | -6.44086082e-01, 3.21868600e-01, 6.93940720e-01, -4.42053435e-01, -1.94962529e-01, -8.75544615e-01, |
33 | -6.44086082e-01, 3.21868600e-01, 6.93940720e-01, -4.42053435e-01, -1.94962529e-01, -8.75544615e-01, |
… | |
… | |
154 | 4.98855035e-01, -3.98703643e-01, 7.69531714e-01, 2.55373649e-01, -7.56251592e-02, 9.63880249e-01, |
155 | 4.98855035e-01, -3.98703643e-01, 7.69531714e-01, 2.55373649e-01, -7.56251592e-02, 9.63880249e-01, |
155 | -1.51053916e-01, 3.85469253e-01, -9.10272580e-01, 6.78644990e-01, -7.26064181e-01, 1.10778074e-01, |
156 | -1.51053916e-01, 3.85469253e-01, -9.10272580e-01, 6.78644990e-01, -7.26064181e-01, 1.10778074e-01, |
156 | -3.07350590e-01, -9.14677987e-01, 2.62487703e-01, 5.60298616e-01, 1.74821302e-01, 8.09631381e-01, |
157 | -3.07350590e-01, -9.14677987e-01, 2.62487703e-01, 5.60298616e-01, 1.74821302e-01, 8.09631381e-01, |
157 | }; |
158 | }; |
158 | |
159 | |
|
|
160 | ///////////////////////////////////////////////////////////////////////////// |
|
|
161 | |
|
|
162 | template<int N, typename T> |
|
|
163 | template<class random_generator> |
|
|
164 | void |
|
|
165 | permutation<N,T>::seed (random_generator &rng) |
|
|
166 | { |
|
|
167 | for (int i = 0; i < N; ++i) |
|
|
168 | pmap[i] = i; |
|
|
169 | |
|
|
170 | // fisher-yates to randomly perturb |
|
|
171 | for (int i = N; --i; ) |
|
|
172 | ::swap (pmap[i], pmap[rng (i + 1)]); |
|
|
173 | } |
|
|
174 | |
|
|
175 | template class permutation<256, uint8_t>; |
|
|
176 | |
|
|
177 | ///////////////////////////////////////////////////////////////////////////// |
|
|
178 | |
159 | static vec2d |
179 | static vec2d |
160 | floor (vec2d v) |
180 | floor (vec2d v) |
161 | { |
181 | { |
162 | return vec2d (std::floor (v[0]), std::floor (v[1])); |
182 | return vec2d (std::floor (v[0]), std::floor (v[1])); |
163 | } |
183 | } |
… | |
… | |
170 | |
190 | |
171 | noise_gen<vec2d>::noise_gen (uint32_t seed) |
191 | noise_gen<vec2d>::noise_gen (uint32_t seed) |
172 | { |
192 | { |
173 | seedable_rand_gen rng (seed); |
193 | seedable_rand_gen rng (seed); |
174 | |
194 | |
175 | #if 1 |
195 | #if 0 |
176 | for (int i = 0; i < 256; ++i) |
196 | for (int i = 0; i < 256; ++i) |
177 | { |
197 | { |
178 | vec2d rv (rng () - 0.5f, rng () - 0.5f); |
198 | vec2d rv (rng () - 0.5f, rng () - 0.5f); |
179 | |
199 | |
180 | // normalise |
200 | // normalise |
… | |
… | |
185 | |
205 | |
186 | rvec[i] = rv; |
206 | rvec[i] = rv; |
187 | } |
207 | } |
188 | #endif |
208 | #endif |
189 | |
209 | |
190 | #if 0 |
210 | #if 1 |
191 | float offset = rng () * 3.14159265; |
211 | float offset = rng () * M_PI; |
192 | |
212 | |
193 | for (int i = 0; i < 256; ++i) |
213 | for (int i = 0; i < 256; ++i) |
194 | { |
214 | { |
195 | float phi = i * (3.14159265 * 2 / 256) + offset; |
215 | float phi = i * (M_PI * 2 / 256) + offset; |
196 | |
216 | |
197 | rvec[i][0] = sinf (phi); |
217 | rvec[i][0] = sinf (phi); |
198 | rvec[i][1] = -cosf (phi); |
218 | rvec[i][1] = -cosf (phi); |
199 | } |
219 | } |
200 | |
220 | |