public Bitmap CreateNoiseBitmap(NoiseType noiseType, Size size, NoiseConfig cfg) { var b = _noiseProvider[noiseType]; var noiseBitmap = b.GetBitmap(size, cfg); Info = $"Density: {b.Density:P}, Coverage: {b.Coverage:P}"; return(noiseBitmap); }
public CellConfig(float frequency, float displacement, Cell.CellType cellType, bool enabledDistance, NoiseConfig cfg ) : base(cfg) { Frequency = frequency; Displacement = displacement; CellType = cellType; EnableDistance = enabledDistance; }
protected override Module BuildNoiseSource(NoiseConfig cfg) { var pcfg = (CylinderConfig)cfg; var noiseSource = new SharpNoise.Modules.Cylinders() { Frequency = pcfg.Frequency, }; return(noiseSource); }
public PerlinConfig(float lacunarity, float frequency, float persistance, int octaves, NoiseQuality quality, NoiseConfig cfg ) : base(cfg) { Lacunarity = lacunarity; Frequency = frequency; Persistance = persistance; Octaves = octaves; Quality = quality; }
// TODO: Seperate UI and config for this one protected override Module BuildNoiseSource(NoiseConfig cfg) { var pcfg = (CellConfig)cfg; var noiseSource = new Cell() { Type = pcfg.CellType, Seed = pcfg.Seed, Frequency = pcfg.Frequency, Displacement = pcfg.Displacement, EnableDistance = pcfg.EnableDistance }; return(noiseSource); }
protected override Module BuildNoiseSource(NoiseConfig cfg) { var pcfg = (PerlinConfig)cfg; var noiseSource = new SharpNoise.Modules.Billow() { Seed = pcfg.Seed, Frequency = pcfg.Frequency, Lacunarity = pcfg.Lacunarity, Persistence = pcfg.Persistance, OctaveCount = pcfg.Octaves, Quality = pcfg.Quality }; return(noiseSource); }
protected override Module BuildNoiseSource(NoiseConfig cfg) { var pcfg = (PerlinConfig)cfg; var noiseSource = new Perlin { Seed = pcfg.Seed, Frequency = pcfg.Frequency, Lacunarity = pcfg.Lacunarity, Persistence = pcfg.Persistance, OctaveCount = pcfg.Octaves, // TODO: Front end for Quality = pcfg.Quality }; return(noiseSource); }
private static void PostProcessing(Size size, NoiseConfig cfg, NoiseMap noiseMap) { var po = new ParallelOptions() { CancellationToken = new CancellationToken(), }; Parallel.For(0, size.Height, po, y => { for (int x = 0; x < size.Width; x++) { var v = noiseMap[x, y]; v *= cfg.Scale; v = v < cfg.MinThreshold ? cfg.MinThreshold : v; v = v > cfg.MaxThreshold ? cfg.MaxThreshold : v; v = cfg.Invert ? 1f - v : v; v = cfg.Round ? (int)Math.Round(v) : v; v = Math.Clamp(Math.Abs(v), 0f, 1f); noiseMap[x, y] = v; } }); }
private static Bitmap CreateBitmap(Size size, NoiseMap map, NoiseConfig cfg) { var image = new SharpNoise.Utilities.Imaging.Image(size.Width, size.Height); var renderer = new ImageRenderer { SourceNoiseMap = map, DestinationImage = image }; if (cfg.OutputGrayscale) { BuildGrayscaleRenderer(renderer); } else { BuildTerrainRenderer(renderer); } renderer.Render(); return(image.ToGdiBitmap()); }
protected virtual NoiseMap BuildNoiseMap(Size size, NoiseConfig cfg) { var noiseSource = BuildNoiseSource(cfg); var noiseMap = new NoiseMap(size.Width, size.Height); var noiseMapBuilder = new PlaneNoiseMapBuilder { DestNoiseMap = noiseMap, SourceModule = noiseSource, EnableSeamless = false }; noiseMapBuilder.SetDestSize(noiseMap.Width, noiseMap.Height); noiseMapBuilder.SetBounds(0, noiseMap.Width * 0.01, 0, noiseMap.Height * 0.01); noiseMapBuilder.Build(); PostProcessing(size, cfg, noiseMap); Size2 = size.Width * size.Height; Total = noiseMap.Data.Sum(); Density = Total / Size2; Coverage = noiseMap.Data.Count(v => v > 0f) / Size2; return(noiseMap); }
public virtual Bitmap GetBitmap(Size size, NoiseConfig cfg) { var map = GetNoiseMap(size, cfg); return(map.IsEmpty ? new Bitmap(1, 1) : CreateBitmap(size, map, cfg)); }
public virtual NoiseMap GetNoiseMap(Size size, NoiseConfig cfg) => BuildNoiseMap(size, cfg);
public virtual double[,] GetMap(Size size, NoiseConfig cfg) => ToArray(size, BuildNoiseMap(size, cfg));
protected abstract Module BuildNoiseSource(NoiseConfig cfg);