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 async void TransitionsAsync() { OverworldGenerator og = new OverworldGenerator(); OverworldTerrain noiseGen = new OverworldTerrain(true); await Task.Run(() => { var map = new NoiseMap(); PlaneNoiseMapBuilder builder = new PlaneNoiseMapBuilder() { DestNoiseMap = map, SourceModule = noiseGen.transitions }; var image = new Image(); var transitionsRenderer = new ImageRenderer() { SourceNoiseMap = map, DestinationImage = image }; transitionsRenderer.BuildGrayscaleGradient(); builder.SetBounds(-400, 400, -300, 300); builder.SetDestSize(800, 600); builder.Build(); transitionsRenderer.Render(); var bmp = transitionsRenderer.DestinationImage.ToGdiBitmap(); bmp.Save("_transitions.bmp"); Assert.Equal(0, 0); }); }
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 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); }
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"); }