Noise: Update Noise::resizeNoiseBuf to account for lacunarity not equal to 2
authorkwolekr <kwolekr@minetest.net>
Tue, 9 Dec 2014 05:48:00 +0000 (00:48 -0500)
committerkwolekr <kwolekr@minetest.net>
Tue, 9 Dec 2014 05:50:58 +0000 (00:50 -0500)
src/noise.cpp

index 3fedf357fdc75b1486322fa1ef3a3f5e6928b2af..57938bd06f4acf4e797f9a05cb3a665edb4bacb2 100644 (file)
@@ -400,15 +400,15 @@ void Noise::resizeNoiseBuf(bool is3d)
        float ofactor;
 
        //maximum possible spread value factor
-       ofactor = (float)(1 << (np->octaves - 1));
+       ofactor = pow(np->lacunarity, np->octaves - 1);
 
        //noise lattice point count
        //(int)(sz * spread * ofactor) is # of lattice points crossed due to length
        // + 2 for the two initial endpoints
        // + 1 for potentially crossing a boundary due to offset
-       nlx = (int)(sx * ofactor / np->spread.X) + 3;
-       nly = (int)(sy * ofactor / np->spread.Y) + 3;
-       nlz = is3d ? (int)(sz * ofactor / np->spread.Z) + 3 : 1;
+       nlx = (int)ceil(sx * ofactor / np->spread.X) + 3;
+       nly = (int)ceil(sy * ofactor / np->spread.Y) + 3;
+       nlz = is3d ? (int)ceil(sz * ofactor / np->spread.Z) + 3 : 1;
 
        delete[] noise_buf;
        try {