public NoiseControl() { InitializeComponent(); var map = new NoiseMap(); var builder = new PlaneNoiseMapBuilder() { DestNoiseMap = map, }; builder.SetDestSize(pictureBox.Width, pictureBox.Height); m_noiseBuilder = builder; var image = new SharpNoise.Utilities.Imaging.Image(); var renderer = new ImageRenderer() { SourceNoiseMap = map, DestinationImage = image, }; if (greyRadioButton.Checked) { renderer.BuildGrayscaleGradient(); } else if (terrainRadioButton.Checked) { renderer.BuildTerrainGradient(); } else { throw new Exception(); } m_imageRenderer = renderer; }
public static void Main(string[] args) { // The noise source - a simple Perlin noise generator will do for this sample var noiseSource = new Perlin { Seed = new Random().Next() }; // Create a new, empty, noise map and initialize a new planar noise map builder with it var noiseMap = new NoiseMap(); var noiseMapBuilder = new PlaneNoiseMapBuilder { DestNoiseMap = noiseMap, SourceModule = noiseSource }; // Set the size of the noise map noiseMapBuilder.SetDestSize(1280, 720); // Set the bounds of the noise mpa builder // These are the coordinates in the noise source from which noise values will be sampled noiseMapBuilder.SetBounds(-3, 3, -2, 2); // Build the noise map - samples values from the noise module above, // using the bounds coordinates we have passed in the builder noiseMapBuilder.Build(); // Create a new image and image renderer var image = new Image(); var renderer = new ImageRenderer { SourceNoiseMap = noiseMap, DestinationImage = image }; // The renderer needs to know how to map noise values to colors. // In this case, we use one of the predefined gradients, specifically the terrain gradient, // which maps lower noise values to blues and greens and higher values to brouns and whites. // This simulates the look of a map with water, grass and vegetation, dirt and mountains. renderer.BuildTerrainGradient(); // Before rendering the image, we could set various parameters on the renderer, // such as the position and color of the light source. // But we aren't going to bother for this sample. // Finally, render the image renderer.Render(); // Finally, save the rendered image as a PNG in the current directory using (var fs = File.OpenWrite("NoiseMap.png")) { image.SaveGdiBitmap(fs, ImageFormat.Png); } }
void OnCheckedChanged(object sender, EventArgs e) { if (greyRadioButton.Checked) { m_imageRenderer.BuildGrayscaleGradient(); } else if (terrainRadioButton.Checked) { m_imageRenderer.BuildTerrainGradient(); } else { throw new Exception(); } if (SomethingChanged != null) { SomethingChanged(); } }
public async void SameAsync() { OverworldTerrainSettings generatorSettings = new OverworldTerrainSettings(); generatorSettings.Seed = 137; OverworldTerrain noiseGen = new OverworldTerrain(generatorSettings, true); var map = new NoiseMap(); PlaneNoiseMapBuilder builder = new PlaneNoiseMapBuilder() { DestNoiseMap = map, SourceModule = noiseGen.Result }; var image = new SharpNoise.Utilities.Imaging.Image(); var renderer = new ImageRenderer() { SourceNoiseMap = map, DestinationImage = image }; //renderer.BuildGrayscaleGradient(); renderer.BuildTerrainGradient(); builder.SetBounds(-2024, 2024, -2024, 2024); builder.SetDestSize(1024, 1024); builder.Build(); renderer.Render(); var bmp = renderer.DestinationImage.ToGdiBitmap(); bmp.Save("terrain.bmp"); Assert.Equal(0, 0); }
public async void TerrainBlendAsync() { OverworldGenerator og = new OverworldGenerator(); OverworldTerrain noiseGen = new OverworldTerrain(true); await Task.Run(() => { var noise = new SharpNoise.Modules.ScaleBias() { Scale = 4, Source0 = noiseGen.selectiveBlend }; var map = new NoiseMap(); PlaneNoiseMapBuilder builder = new PlaneNoiseMapBuilder() { DestNoiseMap = map, SourceModule = noise }; var image = new Image(); var transitionsRenderer = new ImageRenderer() { SourceNoiseMap = map, DestinationImage = image }; transitionsRenderer.BuildTerrainGradient(); builder.SetBounds(-400, 400, -300, 300); builder.SetDestSize(800, 600); builder.Build(); transitionsRenderer.Render(); var bmp = transitionsRenderer.DestinationImage.ToGdiBitmap(); bmp.Save("_blendedterrain.bmp"); Assert.Equal(0, 0); }); }
public static NoisePackage Generate() { // Randomly generate a package to return at the end of the method NoisePackage package = new NoisePackage { Seed = new Random().Next(), OctaveCount = new Random().Next(3, 9), Persistence = new Random().NextDouble(), Quality = (byte)NoiseQuality.Best, Frequency = (double)new Random().Next(1, 3) }; // The noise source - a simple Perlin noise generator will do for this sample Perlin noiseSource = new Perlin { Seed = package.Seed, OctaveCount = package.OctaveCount, Persistence = package.Persistence, Quality = (NoiseQuality)package.Quality, Frequency = package.Frequency }; // Create a new, empty, noise map and initialize a new planar noise map builder with it var noiseMap = new NoiseMap(); var noiseMapBuilder = new PlaneNoiseMapBuilder { DestNoiseMap = noiseMap, SourceModule = noiseSource }; // Set the size of the noise map noiseMapBuilder.SetDestSize(Program.MapWidth, Program.MapHeight); // Set the bounds of the noise mpa builder // These are the coordinates in the noise source from which noise values will be sampled noiseMapBuilder.SetBounds(-3, 3, -2, 2); // Build the noise map - samples values from the noise module above, // using the bounds coordinates we have passed in the builder noiseMapBuilder.Build(); // Create a new image and image renderer var image = new Image(); var renderer = new ImageRenderer { SourceNoiseMap = noiseMap, DestinationImage = image }; // The renderer needs to know how to map noise values to colors. // In this case, we use one of the predefined gradients, specifically the terrain gradient, // which maps lower noise values to blues and greens and higher values to brouns and whites. // This simulates the look of a map with water, grass and vegetation, dirt and mountains. renderer.BuildGrayscaleGradient(); // Before rendering the image, we could set various parameters on the renderer, // such as the position and color of the light source. // But we aren't going to bother for this sample. // Finally, render the image renderer.Render(); // Finally, save the rendered image as a PNG in the current directory using (var fs = File.OpenWrite("NoiseMapGrayscale.png")) { image.SaveGdiBitmap(fs, ImageFormat.Png); } renderer.BuildTerrainGradient(); renderer.Render(); using (var fs = File.OpenWrite("NoiseMapColor.png")) { image.SaveGdiBitmap(fs, ImageFormat.Png); } Process photoViewer = new Process(); photoViewer.StartInfo.FileName = "NoiseMapColor.png"; photoViewer.Start(); Console.WriteLine( "\n Frequency: " + noiseSource.Frequency + "\n Lacunarity: " + noiseSource.Lacunarity + "\n Octaves: " + noiseSource.OctaveCount + "\n Persistence: " + noiseSource.Persistence + "\n Seed: " + noiseSource.Seed + "\n"); return(package); }
/* * m - height map of moisture texture * function biome(e, m) { * if (e < 0.1) return OCEAN; * if (e < 0.12) return BEACH; * * if (e > 0.8) { * if (m < 0.1) return SCORCHED; * if (m < 0.2) return BARE; * if (m < 0.5) return TUNDRA; * return SNOW; * } * * if (e > 0.6) { * if (m < 0.33) return TEMPERATE_DESERT; * if (m < 0.66) return SHRUBLAND; * return TAIGA; * } * * if (e > 0.3) { * if (m < 0.16) return TEMPERATE_DESERT; * if (m < 0.50) return GRASSLAND; * if (m < 0.83) return TEMPERATE_DECIDUOUS_FOREST; * return TEMPERATE_RAIN_FOREST; * } * * if (m < 0.16) return SUBTROPICAL_DESERT; * if (m < 0.33) return GRASSLAND; * if (m < 0.66) return TROPICAL_SEASONAL_FOREST; * return TROPICAL_RAIN_FOREST; * } */ void Generating() { //var mountain = BuildHeightMap( // new ImprovedPerlin(), // new SumFractal() { // Frequency = 2, // Lacunarity = 1, // OctaveCount = 6, // }, 0.1f); var map = new NoiseMap(); try { var rectangle = new Rectangle(0, 0, width, height); var tree = CreateNoiseTree(); var builder = new PlaneNoiseMapBuilder() { DestNoiseMap = map, }; builder.SourceModule = tree; builder.SetDestSize(width, height); builder.SetBounds(6.0, 10.0, 1.0, 5.0); builder.EnableSeamless = false; builder.Build(); var image = new SharpNoise.Utilities.Imaging.Image(); var renderer = new ImageRenderer() { SourceNoiseMap = map, DestinationImage = image, }; renderer.BuildTerrainGradient(); renderer.Render(); Texture = renderer.DestinationImage.ToGdiBitmap(); } catch (Exception ex) { ex.ToString(); } finally { ClearNoiseTree(); } var resources = Path.Combine("../../../../D3DLab.Wpf.Engine.App/Resources/terrain/"); // using (var bitmap = new System.Drawing.Bitmap(Path.Combine(resources, "mask_circular_256x256.png"))) { HeightMap = new Vector3[height * width]; var index = HeightMap.Length - 1; for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { //MakeIsland(ref e, x, y, 200f); //var index = height * y + x; var e = map.GetValue(x, y); ReScale(ref e); Redistribution(ref e); HeightMap[index] = new Vector3(x, e * terrainParams.Correction, y); MaxHeight = Math.Max(HeightMap[index].Y, MaxHeight); MinHeight = Math.Min(HeightMap[index].Y, MinHeight); index--; } } //} IsGenerated = true; }
private void GenerateNoiseMaps() { tbLogView.Text = "Started\r\n"; int SizeX; int SizeY; try { SizeX = Int32.Parse(tbWidth.Text); SizeY = Int32.Parse(tbHeight.Text); NoiseBitmapTerrain = new Bitmap(SizeX, SizeY); NoiseBitmapHeight = new Bitmap(SizeX, SizeY); tbLogView.AppendText("Size OK \r\n"); } catch (Exception) { SizeX = 250; SizeY = 250; MessageBox.Show("Nonparsable size values! Running at 250x250\r\n"); NoiseBitmapTerrain = new Bitmap(250, 250); NoiseBitmapTerrain = new Bitmap(250, 250); tbLogView.AppendText("Size was incorrect, going default\r\n"); } tbLogView.AppendText("Loading Perlin from Noiser(legacy)\r\n"); SharpNoise.Modules.Perlin perlin = new SharpNoise.Modules.Perlin(); tbLogView.AppendText("Loading OK\r\n"); try { perlin.OctaveCount = Int32.Parse(tbOctaves.Text); perlin.Seed = Int32.Parse(tbSeed.Text); perlin.Frequency = Double.Parse(tbFreq.Text); tbLogView.AppendText("Settings OK\r\n"); } catch (Exception) { MessageBox.Show("Wrong octaves count or seed! Running at 1 octave and seed 000000 @ Frequency = 10."); perlin.OctaveCount = 1; perlin.Seed = 000000; perlin.Frequency = 10.0; tbLogView.AppendText("Setting incorrect, going default\r\n"); } double down, up, right, left; try { down = Double.Parse(tbTileDown.Text); up = Double.Parse(tbTileUp.Text); left = Double.Parse(tbTileLeft.Text); right = Double.Parse(tbTileRight.Text); tbLogView.AppendText("Tiles OK\r\n"); } catch (Exception) { up = 3; left = -3; right = 3; down = -3; tbLogView.AppendText("Tiles incorrect, going default\r\n"); } var NoiseMap = new NoiseMap(SizeX, SizeY); if (comboModuleSelector.SelectedIndex == 0) { var NoiseMapBuilder = new PlaneNoiseMapBuilder() { DestNoiseMap = NoiseMap, SourceModule = perlin }; tbLogView.AppendText("Module OK, Destination OK\r\n"); NoiseMapBuilder.SetDestSize(SizeX, SizeY); NoiseMapBuilder.SetBounds(left, right, down, up); tbLogView.AppendText("Building maps.....\r\n"); NoiseMapBuilder.Build(); } if (comboModuleSelector.SelectedIndex == 1) { var GlobeMapBuilder = new SphereNoiseMapBuilder() { DestNoiseMap = NoiseMap, SourceModule = perlin }; tbLogView.AppendText("Module OK, Destination OK\r\n"); GlobeMapBuilder.SetDestSize(SizeX, SizeY); GlobeMapBuilder.SetBounds(down, up, left, right); GlobeMapBuilder.Build(); tbLogView.AppendText("Building maps.....\r\n"); } tbLogView.AppendText("Building OK\r\n"); var ImageTerrain = new SharpNoise.Utilities.Imaging.Image(); var RendererTerrain = new ImageRenderer() { SourceNoiseMap = NoiseMap, DestinationImage = ImageTerrain }; tbLogView.AppendText("Renderer starting\r\n"); if (chboxLightMap.IsChecked == true) { RendererTerrain.EnableLight = true; RendererTerrain.LightAzimuth = Double.Parse(tbLightAzimuth.Text); RendererTerrain.LightBrightness = Double.Parse(tbLightBrightness.Text); RendererTerrain.LightContrast = Double.Parse(tbLightContrast.Text); RendererTerrain.LightElevation = Double.Parse(tbLightElevation.Text); RendererTerrain.LightIntensity = Double.Parse(tbLightIntensity.Text); } Thread ColorBuilder = new Thread(() => { RendererTerrain.BuildTerrainGradient(); RendererTerrain.Render(); NoiseBitmapTerrain = ImageTerrain.ToGdiBitmap(); ImageNoiseHolder.Dispatcher.Invoke(new Action(() => { ImageNoiseHolder.Source = BitmapToImageSource(NoiseBitmapTerrain); tbLogView.AppendText("Done! Noise map OK, renderer OK\r\n"); })); }); ColorBuilder.Start(); var ImageTerrainHeight = new SharpNoise.Utilities.Imaging.Image(); var RendererTerrainHeight = new ImageRenderer() { SourceNoiseMap = NoiseMap, DestinationImage = ImageTerrainHeight }; Thread heightBuilder = new Thread(() => { RendererTerrainHeight.BuildGrayscaleGradient(); RendererTerrainHeight.Render(); NoiseBitmapHeight = ImageTerrainHeight.ToGdiBitmap(); ImageNoiseHeightHolder.Dispatcher.Invoke(new Action(() => { ImageNoiseHeightHolder.Source = BitmapToImageSource(NoiseBitmapHeight); tbLogView.AppendText("Done! Noise map OK, renderer OK\r\n"); })); }); heightBuilder.Start(); tbLogView.AppendText("Process status: OK\r\n"); }