public DemoPartition(DemoPartitionContext context) { if (context == null) throw new ArgumentNullException("context"); this.context = context; settings = context.Settings; heightMap = new NoiseHeightMap(context.GraphicsDevice, settings.HeightMapWidth, settings.HeightMapHeight); heightMap.NoiseSource = context.Noise; normalMap = new NormalMap(context.GraphicsDevice, settings.HeightMapWidth, settings.HeightMapHeight); normalMap.HeightMap = heightMap; normalMap.Amplitude = settings.HeightScale; noiseRainMap = new NoiseRainMap(settings.HeightMapWidth, settings.HeightMapHeight); noiseRainMap.NoiseSource = rainNoise.Sample; noiseRainMap.RainAmount = 0.5f; uniformRainMap = new Map<float>(settings.HeightMapWidth, settings.HeightMapHeight); uniformRainMap.Fill(0.8f); terrainRainMap = new Map<float>(settings.HeightMapWidth, settings.HeightMapHeight); hydraulicErosion.HeightMap = heightMap; //hydraulicErosion.RainMap = noiseRainMap; //hydraulicErosion.RainMap = uniformRainMap; hydraulicErosion.RainMap = terrainRainMap; fastHydraulicErosion.HeightMap = heightMap; //fastHydraulicErosion.RainMap = noiseRainMap; //fastHydraulicErosion.RainMap = uniformRainMap; fastHydraulicErosion.RainMap = terrainRainMap; musgraveHydraulicErosion.HeightMap = heightMap; //musgraveHydraulicErosion.RainMap = noiseRainMap; //musgraveHydraulicErosion.RainMap = uniformRainMap; musgraveHydraulicErosion.RainMap = terrainRainMap; thermalErosion.HeightMap = heightMap; fastThermalErosion.HeightMap = heightMap; terrain = new CDLODTerrain(context.Settings); terrain.HeightMap = heightMap; }
public DemoPartitionFactory(DemoPartitionContext context) { if (context == null) throw new ArgumentNullException("context"); this.context = context; }
protected override void LoadContent() { settings.LevelCount = levelCount; settings.LeafNodeSize = leafNodeSize; settings.PatchResolution = patchResolution; settings.MapScale = mapScale; settings.HeightScale = heightScale; settings.HeightMapWidth = heightMapWidth; settings.HeightMapHeight = heightMapHeight; var visibleRanges = new CDLODDefaultVisibleRanges(settings); visibleRanges.FinestNodeSize = finestNodeSize; visibleRanges.DetailBalance = detailBalance; visibleRanges.Initialize(); #region Noise and fractal test classicPerlin.Seed = noiseSeed; classicPerlin.Reseed(); perlin.Seed = noiseSeed; perlin.Reseed(); simplex.Seed = noiseSeed; simplex.Reseed(); //var noise = perlinNoise; var noise = perlin; //var noise = simplexNoise; //var noise = voronoi; perlinFractal.Source = noise.Sample; sumFractal.Source = noise.Sample; multifractal.Source = noise.Sample; heterofractal.Source = noise.Sample; hybridMultifractal.Source = noise.Sample; ridgedMultifractal.Source = noise.Sample; sinFractal.Source = noise.Sample; billow.Source = noise.Sample; #endregion #region Vorononi test voronoi.Seed = noiseSeed; voronoi.Frequency = 1; voronoi.VoronoiType = VoronoiType.First; voronoi.Metrics = Metrics.Squared; //voronoi.DistanceEnabled = true; #endregion #region Noise combination test var testBaseNoise = perlin; mountainTerrain.Source = testBaseNoise.Sample; baseFlatTerrain.Source = testBaseNoise.Sample; baseFlatTerrain.Frequency = 2.0f; flatTerrain.Source = baseFlatTerrain.Sample; flatTerrain.Scale = 0.525f; flatTerrain.Bias = -0.75f; terrainType.Source = testBaseNoise.Sample; terrainSelector.Controller = terrainType.Sample; terrainSelector.Source0 = (x, y, z) => { return mountainTerrain.Sample(x, y, z) * 1.25f - 1; }; terrainSelector.Source1 = flatTerrain.Sample; terrainSelector.LowerBound = 0; terrainSelector.UpperBound = 1000; terrainSelector.EdgeFalloff = 0.125f; perturbTerrain.Source = terrainSelector.Sample; perturbTerrain.Frequency = 4; perturbTerrain.Power = 0.125f; finalTerrain.Source = perturbTerrain.Sample; finalTerrain.Bias = 0.8f; #endregion #region Recording recNoise.Seed = noiseSeed; recBaseTerrain.Source = recNoise.Sample; recBaseTerrain.OctaveCount = 7; recFinalTerrain.Source = recBaseTerrain.Sample; recFinalTerrain.Scale = 2.5f; #endregion SampleSourceDelegate finalNoiseSource = recFinalTerrain.Sample; partitionContext = new DemoPartitionContext( GraphicsDevice, Content, settings, visibleRanges, finalNoiseSource, noiseSampleX, noiseSampleY, noiseSampleWidth, noiseSampleHeight); partitionContext.TerrainRenderer.FogEnabled = true; partitionContext.TerrainRenderer.FogStart = fogStart; partitionContext.TerrainRenderer.FogEnd = fogEnd; partitionContext.TerrainRenderer.FogColor = fogColor; partitionFactory = new DemoPartitionFactory(partitionContext); var terrainScale = settings.TerrainScale; partitionManager = new PartitionManager(partitionFactory.Create, loadThreadCount, initialPartitionPoolCapacity, maxPartitionPoolCapacity); partitionManager.PartitionWidth = terrainScale.X; partitionManager.PartitionHeight = terrainScale.Z; partitionManager.ActivationRange = terrainScale.X * 4.0f; //partitionManager.ActivationRange = terrainScale.X * 2.0f; partitionManager.DeactivationRange = partitionManager.ActivationRange * 1.5f; partitionManager.EyePosition = view.Position; #region Debug spriteBatch = new SpriteBatch(GraphicsDevice); font = Content.Load<SpriteFont>("Fonts/Debug"); fillTexture = Texture2DHelper.CreateFillTexture(GraphicsDevice); helpMessageFontSize = font.MeasureString(helpMessage); BuildInformationMessage(); informationTextFontSize = font.MeasureString(stringBuilder); #endregion }