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); }