rename perlin-noise to noise; add words for uniform and normal noise
							parent
							
								
									8612057128
								
							
						
					
					
						commit
						215d21c2bd
					
				| 
						 | 
					@ -1,11 +1,14 @@
 | 
				
			||||||
USING: byte-arrays combinators images kernel locals math math.affine-transforms
 | 
					USING: byte-arrays combinators fry images kernel locals math
 | 
				
			||||||
math.functions math.polynomials math.vectors random sequences
 | 
					math.affine-transforms math.functions math.order
 | 
				
			||||||
sequences.product ;
 | 
					math.polynomials math.vectors random random.mersenne-twister
 | 
				
			||||||
IN: perlin-noise
 | 
					sequences sequences.product ;
 | 
				
			||||||
 | 
					IN: noise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: <noise-table> ( -- table )
 | 
					: <perlin-noise-table> ( -- table )
 | 
				
			||||||
    256 iota >byte-array randomize dup append ;
 | 
					    256 iota >byte-array randomize dup append ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<PRIVATE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: fade ( point -- point' )
 | 
					: fade ( point -- point' )
 | 
				
			||||||
    { 0.0 0.0 0.0 10.0 -15.0 6.0 } swap [ polyval ] with map ;
 | 
					    { 0.0 0.0 0.0 10.0 -15.0 6.0 } swap [ polyval ] with map ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +54,18 @@ IN: perlin-noise
 | 
				
			||||||
    v w quot call
 | 
					    v w quot call
 | 
				
			||||||
    ; inline
 | 
					    ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:: noise ( table point -- value )
 | 
					: with-seed ( seed quot -- )
 | 
				
			||||||
 | 
					    [ <mersenne-twister> ] dip with-random ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: >byte-map ( floats -- bytes )
 | 
				
			||||||
 | 
					    [ 255.0 * >fixnum ] B{ } map-as ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: >image ( bytes dim -- image )
 | 
				
			||||||
 | 
					    swap [ L f ] dip image boa ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PRIVATE>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: perlin-noise ( table point -- value )
 | 
				
			||||||
    point unit-cube :> cube
 | 
					    point unit-cube :> cube
 | 
				
			||||||
    point dup vfloor v- :> gradients
 | 
					    point dup vfloor v- :> gradients
 | 
				
			||||||
    gradients fade :> faded
 | 
					    gradients fade :> faded
 | 
				
			||||||
| 
						 | 
					@ -70,14 +84,38 @@ IN: perlin-noise
 | 
				
			||||||
    [ faded second lerp ] 2bi@
 | 
					    [ faded second lerp ] 2bi@
 | 
				
			||||||
    faded third lerp ;
 | 
					    faded third lerp ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: noise-map ( table transform dim -- map ) 
 | 
					 | 
				
			||||||
    [ iota ] map [ a.v 0.0 suffix noise ] with with product-map ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: normalize-0-1 ( sequence -- sequence' )
 | 
					: normalize-0-1 ( sequence -- sequence' )
 | 
				
			||||||
    [ supremum ] [ infimum [ - ] keep ] [ ] tri
 | 
					    [ supremum ] [ infimum [ - ] keep ] [ ] tri
 | 
				
			||||||
    [ swap - ] with map [ swap / ] with map ;
 | 
					    [ swap - ] with map [ swap / ] with map ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: noise-image ( table transform dim -- image )
 | 
					: clamp-0-1 ( sequence -- sequence' )
 | 
				
			||||||
    [ noise-map normalize-0-1 [ 255.0 * >fixnum ] B{ } map-as ]
 | 
					    [ 0.0 max 1.0 min ] map ;
 | 
				
			||||||
    [ swap [ L f ] dip image boa ] bi ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: perlin-noise-map ( table transform dim -- map ) 
 | 
				
			||||||
 | 
					    [ iota ] map [ a.v 0.0 suffix perlin-noise ] with with product-map ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: perlin-noise-byte-map ( table transform dim -- map )
 | 
				
			||||||
 | 
					    perlin-noise-map normalize-0-1 >byte-map ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: perlin-noise-image ( table transform dim -- image )
 | 
				
			||||||
 | 
					    [ perlin-noise-byte-map ] [ >image ] bi ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: uniform-noise-map ( seed dim -- map )
 | 
				
			||||||
 | 
					    [ product [ 0.0 1.0 uniform-random-float ] replicate ]
 | 
				
			||||||
 | 
					    curry with-seed ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: uniform-noise-byte-map ( seed dim -- map )
 | 
				
			||||||
 | 
					    uniform-noise-map >byte-map ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: uniform-noise-image ( seed dim -- image )
 | 
				
			||||||
 | 
					    [ uniform-noise-byte-map ] [ >image ] bi ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: normal-noise-map ( seed sigma dim -- map )
 | 
				
			||||||
 | 
					    swap '[ _ product [ 0.5 _ normal-random-float ] replicate ]
 | 
				
			||||||
 | 
					    with-seed ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: normal-noise-byte-map ( seed sigma dim -- map )
 | 
				
			||||||
 | 
					    normal-noise-map clamp-0-1 >byte-map ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: normal-noise-image ( seed sigma dim -- image )
 | 
				
			||||||
 | 
					    [ normal-noise-byte-map ] [ >image ] bi ;
 | 
				
			||||||
		Loading…
	
		Reference in New Issue