public static WaterTableField GenerateWaters(Bitmap bmp, IField2d <float> baseField = null, WaterTableArgs args = null, Random random = null) { args = args ?? new WaterTableArgs() { seed = System.DateTime.UtcNow.Ticks }; random = random ?? new Random((int)args.seed); baseField = baseField ?? new Simplex2D(bmp.Width, bmp.Height, args.baseNoiseScale, args.seed); Field2d <float> field = new FieldFromBitmap(bmp); baseField = new NormalizedComposition2d <float>(baseField, new ScaleTransform(new Simplex2D(baseField.Width, baseField.Height, args.baseNoiseScale, args.seed), args.baseNoiseScalar)); BrownianTree tree = BrownianTree.CreateFromOther(field, (x) => x > 0.5f ? BrownianTree.Availability.Available : BrownianTree.Availability.Unavailable, random); tree.RunDefaultTree(); HydrologicalField hydro = new HydrologicalField(tree, args.hydroSensitivity, args.hydroShoreThreshold); WaterTableField wtf = new WaterTableField(baseField, hydro, args.wtfShore, args.wtfIt, args.wtfLen, args.wtfGrade, () => { return((float)(args.wtfCarveAdd + random.NextDouble() * args.wtfCarveMul)); }); return(wtf); }
public static void RunMeterScaleMapScenario() { var wta = new WaterTableArgs(); var waters = new FieldFromBitmap(new Bitmap(wta.inputPath + "rivers.png")); var heights = new FieldFromBitmap(new Bitmap(wta.inputPath + "base_heights.png")); var msmArgs = new MeterScaleMap.Args(waters, heights, heights, null); msmArgs.seed = System.DateTime.UtcNow.Ticks; msmArgs.metersPerPixel = 1600; msmArgs.riverCapacityToMetersWideFunc = c => (float)Math.Sqrt(msmArgs.metersPerPixel * SplineTree.CAPACITY_DIVISOR * c); var msm = new MeterScaleMap(msmArgs); msm.OutputHighLevelMaps(new Bitmap(waters.Width, waters.Height), "C:\\Users\\Justin Murray\\Desktop\\terrain\\"); msm.OutputMapGrid(100, "C:\\Users\\Justin Murray\\Desktop\\terrain\\", "submap"); }
public static void RunMeterScaleMapScenarioUR() { var wta = new WaterTableArgs(); var waters = new FieldFromBitmap(new Bitmap(wta.inputPath + "rivers_ur_alt.png")); var heights = new FieldFromBitmap(new Bitmap(wta.inputPath + "base_heights_ur_alt.png")); var roughness = new FieldFromBitmap(new Bitmap(wta.inputPath + "base_heights_ur_alt.png")); var msmArgs = new MeterScaleMap.Args(waters, heights, roughness, null); msmArgs.seed = System.DateTime.UtcNow.Ticks; msmArgs.metersPerPixel = 1600 / 5; msmArgs.riverCapacityToMetersWideFunc = c => (float)Math.Pow(msmArgs.metersPerPixel * SplineTree.CAPACITY_DIVISOR * c, 0.5f) / 4f; msmArgs.baseHeightMaxInMeters = 800f; msmArgs.mountainHeightMaxInMeters = 3000f; msmArgs.valleyStrength = 0.98f; // TODO: Enable a function to control valley width, strength, and glaciation. var msm = new MeterScaleMap(msmArgs); msm.OutputHighLevelMaps(new Bitmap(waters.Width, waters.Height), "C:\\Users\\Justin Murray\\Desktop\\terrain\\"); msm.OutputMapGrid(100, "C:\\Users\\Justin Murray\\Desktop\\terrain\\", "submap", 256); }