Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
    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);
        });
    }
Ejemplo n.º 3
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();
            }
        }
Ejemplo n.º 4
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);
    }
Ejemplo n.º 5
0
        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");
        }