… | |
… | |
52 | |
52 | |
53 | // modelled after 2d/3d kensler noise without projection |
53 | // modelled after 2d/3d kensler noise without projection |
54 | template<> |
54 | template<> |
55 | struct noise_gen<vec2d> |
55 | struct noise_gen<vec2d> |
56 | { |
56 | { |
|
|
57 | static vec2d::T_numtype abs_avg() { return 0.2231; } // avg(abs(noise)) |
|
|
58 | |
57 | permutation<256, uint8_t> rvmap[2]; |
59 | permutation<256, uint8_t> rvmap[2]; |
58 | vec2d rvec[256]; // random unit vectors |
|
|
59 | |
60 | |
60 | noise_gen<vec2d> (uint32_t seed); |
61 | noise_gen<vec2d> (uint32_t seed); |
61 | vec2d::T_numtype operator() (vec2d P); |
62 | vec2d::T_numtype operator() (vec2d P); |
62 | }; |
63 | }; |
63 | |
64 | |
64 | template<> |
65 | template<> |
65 | struct noise_gen<vec3d> |
66 | struct noise_gen<vec3d> |
66 | { |
67 | { |
|
|
68 | static vec3d::T_numtype abs_avg() { return 0.415; } // avg(abs(noise)) |
|
|
69 | |
67 | permutation<256, uint8_t> rvmap[3]; |
70 | permutation<256, uint8_t> rvmap[3]; |
68 | |
71 | |
69 | noise_gen<vec3d> (uint32_t seed); |
72 | noise_gen<vec3d> (uint32_t seed); |
70 | vec2d::T_numtype operator() (vec3d P); |
73 | vec2d::T_numtype operator() (vec3d P); |
71 | |
74 | |
… | |
… | |
110 | |
113 | |
111 | template<class vec_t> |
114 | template<class vec_t> |
112 | struct frac_gen |
115 | struct frac_gen |
113 | : noise_gen<vec_t> |
116 | : noise_gen<vec_t> |
114 | { |
117 | { |
115 | enum { MAX_OCTAVES = 64 }; |
118 | enum { MAX_OCTAVES = 32 }; |
116 | |
119 | |
117 | typedef typename vec_t::T_numtype value_t; |
120 | typedef typename vec_t::T_numtype value_t; |
118 | |
121 | |
119 | value_t h, lac, ex[MAX_OCTAVES]; |
122 | value_t h, lac, ex[MAX_OCTAVES]; |
120 | value_t fbm_mul[MAX_OCTAVES]; |
123 | value_t fbm_mul[MAX_OCTAVES]; |
… | |
… | |
123 | value_t noise (vec_t P) |
126 | value_t noise (vec_t P) |
124 | { |
127 | { |
125 | return operator() (P); |
128 | return operator() (P); |
126 | } |
129 | } |
127 | |
130 | |
128 | frac_gen (value_t hurst_expo = .5f, value_t lacunarity = 2.f); |
131 | frac_gen (value_t hurst_expo = .5, value_t lacunarity = 2); |
129 | |
132 | |
130 | value_t fBm (vec_t P, int octaves); |
133 | value_t fBm (vec_t P, int octaves); |
131 | value_t turbulence (vec_t P, int octaves); |
134 | value_t turbulence (vec_t P, int octaves); |
132 | value_t multifractal (vec_t P, int octaves, value_t offset = 1); |
135 | value_t multifractal (vec_t P, int octaves, value_t offset = 1); |
133 | value_t heterofractal (vec_t P, int octaves, value_t offset = 1); |
136 | value_t heterofractal (vec_t P, int octaves, value_t offset = 1); |
134 | value_t hybridfractal (vec_t P, int octaves, value_t offset = 1, value_t gain = 1); |
137 | value_t hybridfractal (vec_t P, int octaves, value_t offset = 1, value_t gain = 1); |
|
|
138 | value_t ridgedmultifractal (vec_t P, int octaves, value_t offset = 1, value_t gain = 8); |
|
|
139 | value_t billowfractal (vec_t P, int octaves, value_t offset = 1, value_t gain = 2); |
135 | value_t terrain (vec_t P, int octaves); |
140 | value_t terrain (vec_t P, int octaves); |
136 | value_t terrain2 (vec_t P, int octaves); |
141 | value_t terrain2 (vec_t P, int octaves); |
137 | value_t ridgedmultifractal (vec_t P, int octaves, value_t offset = 1, value_t gain = 8); |
|
|
138 | }; |
142 | }; |
139 | |
143 | |
140 | #endif |
144 | #endif |
141 | |
145 | |