Esempio n. 1
0
        public void CreateRandomHeightMap(int seed, float noiseSize, float persistence, int octaves)
        {
            for (var y = 0; y < HeightMapHeight; y++)
            {
                for (var x = 0; x < HeightMapWidth; x++)
                {
                    var xf = (x / (float)HeightMapWidth) * noiseSize;
                    var yf = (y / (float)HeightMapHeight) * noiseSize;

                    var total = 0.0f;
                    for (var i = 0; i < octaves; i++)
                    {
                        var freq  = (float)Math.Pow(2.0f, i);
                        var amp   = (float)Math.Pow(persistence, i);
                        var tx    = xf * freq;
                        var ty    = yf * freq;
                        var txi   = (int)tx;
                        var tyi   = (int)ty;
                        var fracX = tx - txi;
                        var fracY = ty - tyi;

                        var v1 = MathF.Noise(txi + tyi * 57 + seed);
                        var v2 = MathF.Noise(txi + 1 + tyi * 57 + seed);
                        var v3 = MathF.Noise(txi + (tyi + 1) * 57 + seed);
                        var v4 = MathF.Noise(txi + 1 + (tyi + 1) * 57 + seed);

                        var i1 = MathF.CosInterpolate(v1, v2, fracX);
                        var i2 = MathF.CosInterpolate(v3, v4, fracX);
                        total += MathF.CosInterpolate(i1, i2, fracY) * amp;
                    }
                    var b = (int)(128 + total * 128.0f);
                    if (b < 0)
                    {
                        b = 0;
                    }
                    if (b > 255)
                    {
                        b = 255;
                    }

                    _heightMap[x + y * HeightMapHeight] = (b / 255.0f) * MaxHeight;
                }
            }
        }