فهرست منبع

add Perlin.normalize

trethaller 5 سال پیش
والد
کامیت
6e3b08e1e6
1فایلهای تغییر یافته به همراه12 افزوده شده و 0 حذف شده
  1. 12 0
      hxd/Perlin.hx

+ 12 - 0
hxd/Perlin.hx

@@ -3,6 +3,10 @@ package hxd;
 class Perlin {
 
 	public var repeat : Int;
+
+	/** Keep result in the [-1, 1] range **/
+	public var normalize : Bool;
+
 	#if flash
 	var buf : flash.utils.ByteArray;
 	#else
@@ -154,23 +158,31 @@ class Perlin {
 	public function perlin( seed : Int, x : Float, y : Float, octaves : Int, persist : Float = 0.5, lacunarity = 2.0 ) {
 		var v = 0.;
 		var k = 1.;
+		var sum = 0.;
 		for( i in 0...octaves ) {
 			v += inlineGradient(seed + i, x, y) * k;
+			sum += k;
 			k *= persist;
 			x *= lacunarity;
 			y *= lacunarity;
 		}
+		if(normalize)
+			v /= sum;
 		return v;
 	}
 
 	public function perlin1D( seed : Int, x : Float, octaves : Int, persist : Float = 0.5, lacunarity = 2.0 ) {
 		var v = 0.;
 		var k = 1.;
+		var sum = 0.;
 		for( i in 0...octaves ) {
 			v += gradient1D(seed + i, x) * k;
+			sum += k;
 			k *= persist;
 			x *= lacunarity;
 		}
+		if(normalize)
+			v /= sum;
 		return v;
 	}