public void Generate(IScene scene, string[] s) { //string noiseGen = MainConsole.Instance.CmdPrompt("Noise generator (Perlin or Kosh)", "Perlin", new List<string>(new [] { "Perlin", "Kosh" })); //if(noiseGen == "Perlin") { _noiseGen = m_perlinNoise; PerlinNoiseSettings pns = new PerlinNoiseSettings(); pns.ResultX = scene.RegionInfo.RegionSizeX; pns.ResultY = scene.RegionInfo.RegionSizeY; pns.RandomSeed = int.Parse(MainConsole.Instance.Prompt("Random Seed (0-infinity)", "10")); pns.CorsenessX = int.Parse(MainConsole.Instance.Prompt("Corseness (X direction) (2-1000)", "100")); pns.CorsenessY = int.Parse(MainConsole.Instance.Prompt("Corseness (Y direction) (2-1000)", "100")); pns.FlatEdges = MainConsole.Instance.Prompt("Flat Edges (recommended)", "true", new List <string>(new[] { "true", "false" })) == "true"; pns.Octaves = int.Parse(MainConsole.Instance.Prompt("Octaves (0-infinity)", "5")); pns.Persistence = float.Parse(MainConsole.Instance.Prompt("Persistence", "0.8")); _noiseGen.Settings = pns; } /*else * { * _noiseGen = m_kochLikeNoise; * KochLikeNoiseSettings kns = new KochLikeNoiseSettings(); * kns.ResultX = MainConsole.Instance.Prompt.RegionInfo.RegionSizeX; * kns.ResultY = MainConsole.Instance.Prompt.RegionInfo.RegionSizeY; * kns.H = double.Parse(MainConsole.Instance.Prompt("H", "1.0")); * kns.InitalGridX = int.Parse(MainConsole.Instance.Prompt("Initial Grid X", "2")); * if(kns.InitalGridX < 2) * kns.InitalGridX = 2; * kns.InitalGridY = int.Parse(MainConsole.Instance.Prompt("Initial Grid Y", "2")); * if(kns.InitalGridY < 2) * kns.InitalGridY = 2; * kns.RandomMin = int.Parse(MainConsole.Instance.Prompt("Random Min", "-1")); * kns.RandomMax = int.Parse(MainConsole.Instance.Prompt("Random Max", "1")); * kns.RandomSeed = int.Parse(MainConsole.Instance.Prompt("Random Seed", "0")); * kns.Scale = double.Parse(MainConsole.Instance.Prompt("Scale", "1.0")); * _noiseGen.Settings = kns; * }*/ float scaling = float.Parse(MainConsole.Instance.Prompt("Fractal Scaling", "50")); float[,] land = _noiseGen.Generate(); ITerrainChannel c = new TerrainChannel(scene); for (int x = 0; x < scene.RegionInfo.RegionSizeX; x++) { for (int y = 0; y < scene.RegionInfo.RegionSizeY; y++) { c[x, y] = (land[x, y] * scaling) + (float)scene.RegionInfo.RegionSettings.WaterHeight + 10; } } scene.RequestModuleInterface <ITerrainModule>().TerrainMap = c; scene.RequestModuleInterface <ITerrainModule>().TaintTerrain(); scene.RegisterModuleInterface <ITerrainChannel>(c); }
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { PerlinNoiseSettings[] settings = new PerlinNoiseSettings[this.layers.Items.Count]; for (int i = 0; i < this.layers.Items.Count; i++) { settings[i] = PerlinNoiseSettings.Parse((string)this.layers.Items[i]); } this.start = DateTime.Now; this.full = PerlinNoiseGenerator.GetImage(settings, (int)this.resolution.Value, (int)this.threads.Value, (int)this.seed.Value); this.end = DateTime.Now; }
private void generate_Click(object sender, EventArgs e) { if (layers.Items.Count == 0) { MessageBox.Show("Please add a layer."); return; } int layerCount = 0; foreach (string l in layers.Items) { layerCount += PerlinNoiseSettings.Parse(l).Levels; } this.viewer = new ImageViewer((int)this.resolution.Value * layerCount); this.viewer.Show(); this.backgroundWorker.RunWorkerAsync(); }
public static void ApplyNoiseToMapTexture(Texture2D mapTexture, PerlinNoiseSettings settings, float noiseOffsetFactor) { var noiseTexture = NoiseTextureHelper.PerlinNoise(mapTexture.width, settings); var mapColors = mapTexture.GetPixels(); var noiseColors = noiseTexture.GetPixels(); Debug.Assert(mapColors.Length == noiseColors.Length, "Cannot use textures with different resolutions!"); for (var i = 0; i < mapColors.Length; ++i) { mapColors[i].r -= noiseColors[i].r * noiseOffsetFactor; } mapTexture.SetPixels(mapColors); mapTexture.Apply(); }
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { PerlinNoiseSettings[] settings = new PerlinNoiseSettings[this.layers.Items.Count]; for (int i = 0; i < this.layers.Items.Count; i++) settings[i] = PerlinNoiseSettings.Parse((string)this.layers.Items[i]); this.start = DateTime.Now; this.full = PerlinNoiseGenerator.GetImage(settings, (int)this.resolution.Value, (int)this.threads.Value, (int)this.seed.Value); this.end = DateTime.Now; }
public PerlinNoise(PerlinNoiseSettings settings) { Settings = settings; _permutation = CalculatePermutation(); _gradients = CalculateGradients(); }