|  |  |  | @ -81,6 +81,7 @@ extern float stb_perlin_noise3(float x, float y, float z, int x_wrap, int y_wrap | 
			
		
	
		
			
				
					|  |  |  |  | extern float stb_perlin_ridge_noise3(float x, float y, float z, float lacunarity, float gain, float offset, int octaves); | 
			
		
	
		
			
				
					|  |  |  |  | extern float stb_perlin_fbm_noise3(float x, float y, float z, float lacunarity, float gain, int octaves); | 
			
		
	
		
			
				
					|  |  |  |  | extern float stb_perlin_turbulence_noise3(float x, float y, float z, float lacunarity, float gain, int octaves); | 
			
		
	
		
			
				
					|  |  |  |  | extern float stb_perlin_noise3_wrap_nonpow2(float x, float y, float z, int x_wrap, int y_wrap, int z_wrap, unsigned char seed); | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef __cplusplus | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
	
		
			
				
					|  |  |  | @ -321,6 +322,66 @@ float stb_perlin_turbulence_noise3(float x, float y, float z, float lacunarity, | 
			
		
	
		
			
				
					|  |  |  |  |    return sum; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | float stb_perlin_noise3_wrap_nonpow2(float x, float y, float z, int x_wrap, int y_wrap, int z_wrap, unsigned char seed) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    float u,v,w; | 
			
		
	
		
			
				
					|  |  |  |  |    float n000,n001,n010,n011,n100,n101,n110,n111; | 
			
		
	
		
			
				
					|  |  |  |  |    float n00,n01,n10,n11; | 
			
		
	
		
			
				
					|  |  |  |  |    float n0,n1; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    int px = stb__perlin_fastfloor(x); | 
			
		
	
		
			
				
					|  |  |  |  |    int py = stb__perlin_fastfloor(y); | 
			
		
	
		
			
				
					|  |  |  |  |    int pz = stb__perlin_fastfloor(z); | 
			
		
	
		
			
				
					|  |  |  |  |    int x_wrap2 = (x_wrap ? x_wrap : 256); | 
			
		
	
		
			
				
					|  |  |  |  |    int y_wrap2 = (y_wrap ? y_wrap : 256); | 
			
		
	
		
			
				
					|  |  |  |  |    int z_wrap2 = (z_wrap ? z_wrap : 256); | 
			
		
	
		
			
				
					|  |  |  |  |    int x0 = px % x_wrap2, x1; | 
			
		
	
		
			
				
					|  |  |  |  |    int y0 = py % y_wrap2, y1; | 
			
		
	
		
			
				
					|  |  |  |  |    int z0 = pz % z_wrap2, z1; | 
			
		
	
		
			
				
					|  |  |  |  |    int r0,r1, r00,r01,r10,r11; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    if (x0 < 0) x0 += x_wrap2; | 
			
		
	
		
			
				
					|  |  |  |  |    if (y0 < 0) y0 += y_wrap2; | 
			
		
	
		
			
				
					|  |  |  |  |    if (z0 < 0) z0 += z_wrap2; | 
			
		
	
		
			
				
					|  |  |  |  |    x1 = (x0+1) % x_wrap2; | 
			
		
	
		
			
				
					|  |  |  |  |    y1 = (y0+1) % y_wrap2; | 
			
		
	
		
			
				
					|  |  |  |  |    z1 = (z0+1) % z_wrap2; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    #define stb__perlin_ease(a)   (((a*6-15)*a + 10) * a * a * a) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    x -= px; u = stb__perlin_ease(x); | 
			
		
	
		
			
				
					|  |  |  |  |    y -= py; v = stb__perlin_ease(y); | 
			
		
	
		
			
				
					|  |  |  |  |    z -= pz; w = stb__perlin_ease(z); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    r0 = stb__perlin_randtab[x0]; | 
			
		
	
		
			
				
					|  |  |  |  |    r0 = stb__perlin_randtab[r0+seed]; | 
			
		
	
		
			
				
					|  |  |  |  |    r1 = stb__perlin_randtab[x1]; | 
			
		
	
		
			
				
					|  |  |  |  |    r1 = stb__perlin_randtab[r1+seed]; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    r00 = stb__perlin_randtab[r0+y0]; | 
			
		
	
		
			
				
					|  |  |  |  |    r01 = stb__perlin_randtab[r0+y1]; | 
			
		
	
		
			
				
					|  |  |  |  |    r10 = stb__perlin_randtab[r1+y0]; | 
			
		
	
		
			
				
					|  |  |  |  |    r11 = stb__perlin_randtab[r1+y1]; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    n000 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r00+z0], x  , y  , z   ); | 
			
		
	
		
			
				
					|  |  |  |  |    n001 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r00+z1], x  , y  , z-1 ); | 
			
		
	
		
			
				
					|  |  |  |  |    n010 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r01+z0], x  , y-1, z   ); | 
			
		
	
		
			
				
					|  |  |  |  |    n011 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r01+z1], x  , y-1, z-1 ); | 
			
		
	
		
			
				
					|  |  |  |  |    n100 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r10+z0], x-1, y  , z   ); | 
			
		
	
		
			
				
					|  |  |  |  |    n101 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r10+z1], x-1, y  , z-1 ); | 
			
		
	
		
			
				
					|  |  |  |  |    n110 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r11+z0], x-1, y-1, z   ); | 
			
		
	
		
			
				
					|  |  |  |  |    n111 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r11+z1], x-1, y-1, z-1 ); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    n00 = stb__perlin_lerp(n000,n001,w); | 
			
		
	
		
			
				
					|  |  |  |  |    n01 = stb__perlin_lerp(n010,n011,w); | 
			
		
	
		
			
				
					|  |  |  |  |    n10 = stb__perlin_lerp(n100,n101,w); | 
			
		
	
		
			
				
					|  |  |  |  |    n11 = stb__perlin_lerp(n110,n111,w); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    n0 = stb__perlin_lerp(n00,n01,v); | 
			
		
	
		
			
				
					|  |  |  |  |    n1 = stb__perlin_lerp(n10,n11,v); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    return stb__perlin_lerp(n0,n1,u); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif  // STB_PERLIN_IMPLEMENTATION
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /*
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |