internal override void GenerateColorMap(int height) { var width = 2 * height; if (HasAtmosphere && TemperatureNoiseMap == null) { GenerateTemperatureMap(height); } else if (HeightNoiseMap == null) { GenerateHeightMap(height); } var builder = new SphereNoiseMapBuilder(); builder.SetDestSize(width, height); builder.SetBounds(-90, 90, -180, 180); ColorNoiseMap = new NoiseMap(); builder.SourceModule = ColorNoiseModule; builder.DestNoiseMap = ColorNoiseMap; builder.Build(); for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var value = ColorNoiseMap.GetValue(x, y); value = (value - MinHeight) / (MaxHeight - MinHeight); ColorNoiseMap.SetValue(x, y, value); } } }
private void GenerateTemperatureMap(int height) { var width = 2 * height; if (HeightNoiseMap == null) { GenerateHeightMap(height); } var builder = new SphereNoiseMapBuilder(); builder.SetDestSize(width, height); builder.SetBounds(-90, 90, -180, 180); TemperatureNoiseMap = new NoiseMap(); builder.SourceModule = TemperatureNoiseModule; builder.DestNoiseMap = TemperatureNoiseMap; builder.Build(); MinTemperature = 1000000.0f; MaxTemperature = 0.0f; var solarHeat = Pow(SurfaceTemperature, 4); var extraHeat = Pow(GeothermalTemperature, 4) + Pow(GreenhouseTemp, 4); var coldness = 1 - (float)Random.Uniform("coldness", Pow(extraHeat / (solarHeat + extraHeat), 0.25), 1); if (HasAtmosphere) { for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var heat = extraHeat + solarHeat * 2 * Sin(PI * y / height); var temperature = (float)Pow(heat, 0.25); temperature *= 1 - coldness * HeightNoiseMap.GetValue(x, y); if (temperature < MinTemperature) { MinTemperature = temperature; } else if (temperature > MaxTemperature) { MaxTemperature = temperature; } temperature *= 1 + 0.05f * (TemperatureNoiseMap.GetValue(x, y) - 1); TemperatureNoiseMap.SetValue(x, y, temperature); } } } }
private void GenerateTemperatureMap(int height) { var width = 2 * height; var builder = new SphereNoiseMapBuilder(); builder.SetDestSize(width, height); builder.SetBounds(-90, 90, -180, 180); TemperatureNoiseMap = new NoiseMap(); builder.SourceModule = TemperatureNoiseModule; builder.DestNoiseMap = TemperatureNoiseMap; builder.Build(); var min = 10.0f; var max = -10.0f; for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var value = TemperatureNoiseMap.GetValue(x, y); if (value < min) { min = value; } else if (value > max) { max = value; } } } for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var value = TemperatureNoiseMap.GetValue(x, y); value = (value - min) / (max - min); value = 0.75f + 0.25f * value; value *= (float)EffectiveTemperature; TemperatureNoiseMap.SetValue(x, y, value); } } }
private void GenerateHeightMap(int height) { var width = 2 * height; var builder = new SphereNoiseMapBuilder(); builder.SetDestSize(width, height); builder.SetBounds(-90, 90, -180, 180); HeightNoiseMap = new NoiseMap(); builder.SourceModule = HeightNoiseModule; builder.DestNoiseMap = HeightNoiseMap; builder.Build(); MinHeight = 10.0f; MaxHeight = -10.0f; for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var value = HeightNoiseMap.GetValue(x, y); if (value < MinHeight) { MinHeight = value; } else if (value > MaxHeight) { MaxHeight = value; } } } for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var value = HeightNoiseMap.GetValue(x, y); value = (value - MinHeight) / (MaxHeight - MinHeight); HeightNoiseMap.SetValue(x, y, value); } } }
public Bitmap Render() { NoiseMap noise = new NoiseMap(this.Map.MapWidth, this.Map.MapHeight); // Copy map data to noise map. for (int z = 0; z < noise.Height; z++) { for (int x = 0; x < noise.Width; x++) { noise.SetValue(x, z, this.Map.HeightMap[x, z] * this.Map.Resolution); } } this.Renderer.NoiseMap = noise; BitmapAdaptater adapter = new BitmapAdaptater(noise.Width, noise.Height); this.Renderer.Image = adapter; this.Renderer.Render(); this.Image = adapter.Bitmap; return(this.Image); }
internal override void GenerateColorMap(int height) { var width = 2 * height; var builder = new SphereNoiseMapBuilder(); ColorNoiseMap = new NoiseMap(); builder.SourceModule = ColorNoiseModule; builder.SetDestSize(width, height); builder.DestNoiseMap = ColorNoiseMap; builder.SetBounds(-90, 90, -180, 180); builder.Build(); HeightNoiseMap = new NoiseMap(); builder.SourceModule = HeightNoiseModule; builder.SetDestSize(1, height); builder.DestNoiseMap = HeightNoiseMap; builder.SetBounds(-90, 90, 0, 0.000001); builder.Build(); var min = 1000.0f; var max = -1000.0f; var factor = 0.3f; var values = new float[height]; for (var y = 0; y < height; y++) { var value = (1 - factor) * HeightNoiseMap.GetValue(0, y) + factor * HeightNoiseMap.GetValue(0, height - y); values[y] = value; if (value < min) { min = value; } else if (value > max) { max = value; } } for (var y = 0; y < height; y++) { var value = values[y]; value = (value - min) / (max - min); values[y] = value; } min = 1000.0f; max = -1000.0f; for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var value = ColorNoiseMap.GetValue(x, y); if (value < min) { min = value; } else if (value > max) { max = value; } } } var turbulence = (float)Sqrt(0.003 * Mass / EarthMass); var d = turbulence * 0.03f; for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var value = ColorNoiseMap.GetValue(x, y); value = (value - min) / (max - min); value = (1 - 2 * d) * y / height + d + d * value; var i = (int)(value * height); if (i < 0) { i = 0; } if (i > height - 1) { i = height - 1; } value = values[i]; var a = (float)Sin(PI * y / height); a *= a * a; value *= a; value *= turbulence; ColorNoiseMap.SetValue(x, y, value); } } }