Exemple #1
0
        private float[] GenerateHeightMap(Biome[] biomes, int chunkX, int chunkZ)
        {
            int minX = (chunkX * 16) - 1;
            int minZ = (chunkZ * 16) - 1;
            var maxX = ((chunkX + 1) << 4) - 1;
            var maxZ = ((chunkZ + 1) << 4) - 1;

            int cx = (chunkX * 16);
            int cz = (chunkZ * 16);

            float q11 = MathHelpers.Abs(WaterLevel + (128f * biomes[0].MaxHeight) * _mainNoise.GetValue(minX, minZ));
            float q12 = MathHelpers.Abs(WaterLevel + (128f * biomes[15].MaxHeight) * _mainNoise.GetValue(minX, maxZ));

            float q21 = MathHelpers.Abs(WaterLevel + (128f * biomes[240].MaxHeight) * _mainNoise.GetValue(maxX, minZ));
            float q22 = MathHelpers.Abs(WaterLevel + (128f * biomes[255].MaxHeight) * _mainNoise.GetValue(maxX, maxZ));

            /*float q11 = WaterLevel + 128f * MathHelpers.Abs(_mainNoise.GetValue(minX, minZ));
            *  float q12 = WaterLevel + 128f * MathHelpers.Abs(_mainNoise.GetValue(minX, maxZ));
            *
            *  float q21 = WaterLevel + 128f * MathHelpers.Abs(_mainNoise.GetValue(maxX, minZ));
            *  float q22 = WaterLevel + 128f * MathHelpers.Abs(_mainNoise.GetValue(maxX, maxZ));*/

            float[] heightMap = new float[16 * 16];

            for (int x = 0; x < 16; x++)
            {
                float rx = cx + x;

                for (int z = 0; z < 16; z++)
                {
                    float rz = cz + z;

                    var baseNoise = MathHelpers.BilinearCmr(
                        rx, rz,
                        q11,
                        q12,
                        q21,
                        q22,
                        minX, maxX, minZ, maxZ);

                    heightMap[(x << 4) + z] = baseNoise;                     //WaterLevel + ((128f * baseNoise));
                }
            }
            return(heightMap);
        }