39
44
#include <config.h>
43
#pragma warning (once : 4244) // "conversion from double to float"
44
#pragma warning (once : 4305) // "truncation from const double to float"
48
48
float noise3_perlin(float vec[3]);
49
49
float turbulence_perlin(float *point, float lofreq, float hifreq);
210
210
#define lerp(t, a, b) ((a)+(t)*((b)-(a)))
211
211
#define npfade(t) ((t)*(t)*(t)*((t)*((t)*6-15)+10))
213
float grad(int hash, float x, float y, float z)
213
static float grad(int hash, float x, float y, float z)
215
215
int h = hash & 15; // CONVERT LO 4 BITS OF HASH CODE
216
216
float u = h<8 ? x : y, // INTO 12 GRADIENT DIRECTIONS.
221
221
/* instead of adding another permutation array, just use hash table defined above */
222
float newPerlin(float x, float y, float z)
222
static float newPerlin(float x, float y, float z)
224
224
int A, AA, AB, B, BA, BB;
225
225
float u=floor(x), v=floor(y), w=floor(z);
245
245
/* for use with BLI_gNoise()/BLI_gTurbulence(), returns unsigned improved perlin noise */
246
float newPerlinU(float x, float y, float z)
246
static float newPerlinU(float x, float y, float z)
248
248
return (0.5+0.5*newPerlin(x, y, z));
254
254
/**************************/
256
256
/* Was BLI_hnoise(), removed noisesize, so other functions can call it without scaling. */
257
float orgBlenderNoise(float x, float y, float z)
257
static float orgBlenderNoise(float x, float y, float z)
259
259
register float cn1, cn2, cn3, cn4, cn5, cn6, i, *h;
260
260
float ox, oy, oz, jx, jy, jz;
326
326
/* as orgBlenderNoise(), returning signed noise */
327
float orgBlenderNoiseS(float x, float y, float z)
327
static float orgBlenderNoiseS(float x, float y, float z)
329
329
return (2.0*orgBlenderNoise(x, y, z)-1.0);
534
534
/* for use with BLI_gNoise/gTurbulence, returns signed noise */
535
float orgPerlinNoise(float x, float y, float z)
535
static float orgPerlinNoise(float x, float y, float z)
545
545
/* for use with BLI_gNoise/gTurbulence, returns unsigned noise */
546
float orgPerlinNoiseU(float x, float y, float z)
546
static float orgPerlinNoiseU(float x, float y, float z)
585
585
/* Camberra omitted, didn't seem useful */
587
587
/* distance squared */
588
float dist_Squared(float x, float y, float z, float e) { return (x*x + y*y + z*z); }
588
static float dist_Squared(float x, float y, float z, float e) { return (x*x + y*y + z*z); }
589
589
/* real distance */
590
float dist_Real(float x, float y, float z, float e) { return sqrt(x*x + y*y + z*z); }
590
static float dist_Real(float x, float y, float z, float e) { return sqrt(x*x + y*y + z*z); }
591
591
/* manhattan/taxicab/cityblock distance */
592
float dist_Manhattan(float x, float y, float z, float e) { return (fabs(x) + fabs(y) + fabs(z)); }
592
static float dist_Manhattan(float x, float y, float z, float e) { return (fabs(x) + fabs(y) + fabs(z)); }
594
float dist_Chebychev(float x, float y, float z, float e)
594
static float dist_Chebychev(float x, float y, float z, float e)
604
604
/* minkovsky preset exponent 0.5 */
605
float dist_MinkovskyH(float x, float y, float z, float e)
605
static float dist_MinkovskyH(float x, float y, float z, float e)
607
607
float d = sqrt(fabs(x)) + sqrt(fabs(y)) + sqrt(fabs(z));
611
611
/* minkovsky preset exponent 4 */
612
float dist_Minkovsky4(float x, float y, float z, float e)
612
static float dist_Minkovsky4(float x, float y, float z, float e)
620
620
/* Minkovsky, general case, slow, maybe too slow to be useful */
621
float dist_Minkovsky(float x, float y, float z, float e)
621
static float dist_Minkovsky(float x, float y, float z, float e)
623
623
return pow(pow(fabs(x), e) + pow(fabs(y), e) + pow(fabs(z), e), 1.0/e);
698
698
/* returns different feature points for use in BLI_gNoise() */
699
float voronoi_F1(float x, float y, float z)
699
static float voronoi_F1(float x, float y, float z)
701
701
float da[4], pa[12];
702
702
voronoi(x, y, z, da, pa, 1, 0);
706
float voronoi_F2(float x, float y, float z)
706
static float voronoi_F2(float x, float y, float z)
708
708
float da[4], pa[12];
709
709
voronoi(x, y, z, da, pa, 1, 0);
713
float voronoi_F3(float x, float y, float z)
713
static float voronoi_F3(float x, float y, float z)
715
715
float da[4], pa[12];
716
716
voronoi(x, y, z, da, pa, 1, 0);
720
float voronoi_F4(float x, float y, float z)
720
static float voronoi_F4(float x, float y, float z)
722
722
float da[4], pa[12];
723
723
voronoi(x, y, z, da, pa, 1, 0);
727
float voronoi_F1F2(float x, float y, float z)
727
static float voronoi_F1F2(float x, float y, float z)
729
729
float da[4], pa[12];
730
730
voronoi(x, y, z, da, pa, 1, 0);
734
734
/* Crackle type pattern, just a scale/clamp of F2-F1 */
735
float voronoi_Cr(float x, float y, float z)
735
static float voronoi_Cr(float x, float y, float z)
737
737
float t = 10*voronoi_F1F2(x, y, z);
738
738
if (t>1.f) return 1.f;
743
743
/* Signed version of all 6 of the above, just 2x-1, not really correct though (range is potentially (0, sqrt(6)).
744
744
Used in the musgrave functions */
745
float voronoi_F1S(float x, float y, float z)
745
static float voronoi_F1S(float x, float y, float z)
747
747
float da[4], pa[12];
748
748
voronoi(x, y, z, da, pa, 1, 0);
749
749
return (2.0*da[0]-1.0);
752
float voronoi_F2S(float x, float y, float z)
752
static float voronoi_F2S(float x, float y, float z)
754
754
float da[4], pa[12];
755
755
voronoi(x, y, z, da, pa, 1, 0);
756
756
return (2.0*da[1]-1.0);
759
float voronoi_F3S(float x, float y, float z)
759
static float voronoi_F3S(float x, float y, float z)
761
761
float da[4], pa[12];
762
762
voronoi(x, y, z, da, pa, 1, 0);
763
763
return (2.0*da[2]-1.0);
766
float voronoi_F4S(float x, float y, float z)
766
static float voronoi_F4S(float x, float y, float z)
768
768
float da[4], pa[12];
769
769
voronoi(x, y, z, da, pa, 1, 0);
770
770
return (2.0*da[3]-1.0);
773
float voronoi_F1F2S(float x, float y, float z)
773
static float voronoi_F1F2S(float x, float y, float z)
775
775
float da[4], pa[12];
776
776
voronoi(x, y, z, da, pa, 1, 0);
780
780
/* Crackle type pattern, just a scale/clamp of F2-F1 */
781
float voronoi_CrS(float x, float y, float z)
781
static float voronoi_CrS(float x, float y, float z)
783
783
float t = 10*voronoi_F1F2(x, y, z);
784
784
if (t>1.f) return 1.f;
797
797
/* returns unsigned cellnoise */
798
float cellNoiseU(float x, float y, float z)
798
static float cellNoiseU(float x, float y, float z)
800
800
int xi = (int)(floor(x));
801
801
int yi = (int)(floor(y));