double GetCoastalModifier(DoubleVector3 location, int level, double scale, double continentalHeight) { var continentalHeightPercentage = DoubleMathHelper.Lerp(0, 1, continentalHeight / scale / 2); var coastalDamping1 = MathHelper.Clamp((float)continentalHeightPercentage * 200, 0, 1); var coastalDamping2 = NoiseFilter.Hermite(DoubleMathHelper.Clamp(continentalHeightPercentage * 2000, 0, 1)); var coastalModifier = coastalDamping1 * coastalDamping2; return(coastalModifier); }
double GetRegionalModifier(DoubleVector3 location) { var lowFrequencyRegionalModifier = _regionalGenerator1.GetSpectralNoise(location, 21, 4, 2.0, 0.5); lowFrequencyRegionalModifier += 1; var mediumFrequencyRegionalModifier = _regionalGenerator2.GetSpectralNoise(location, 30, 4, 2.0, 0.5); mediumFrequencyRegionalModifier += 1; var regionalModifier = DoubleMathHelper.Clamp(lowFrequencyRegionalModifier * mediumFrequencyRegionalModifier, 0, 2); return(regionalModifier); }
public double GetHeight(DoubleVector3 location, int level, double scale) { var heightVariance1 = _varianceGenerator1.GetNoise(location, 5, 4, 2.0, 0.5); heightVariance1 = (heightVariance1 + 1); var heightVariance2 = _varianceGenerator2.GetNoise(location, 15, 4, 3.0, 0.5); heightVariance2 = (heightVariance2 + 1); var heightVariance = DoubleMathHelper.Clamp(heightVariance1 * heightVariance2, 0, 2); _sampleCount++; if (_sampleCount % 1000 == 0) { Debug.WriteLine(heightVariance); } var height = heightVariance * scale; return(height); }
double AccumulateNoise(DoubleVector3 location, int numberOfOctaves, double lacunarity, double gain) { double weight = 1; double noise = 0; double amplitude = 1; for (int x = 0; x < numberOfOctaves; x++) { double signal = _noiseGenerator.GetNoise(location); signal = 1 - Math.Abs(signal); signal *= signal * weight; weight = signal / gain; weight = DoubleMathHelper.Clamp(weight, 0, 1); noise += (signal * amplitude); location *= lacunarity; amplitude *= gain; } return((noise * 1.25) - 1.0);; }
public void Update() { // TODO: need to disable changed events while doing this StatisticsList.Clear(); StatisticsList.Add("Frame rate: " + _statistics.FrameRate); StatisticsList.Add("Number of quad nodes: " + _statistics.NumberOfQuadNodes); StatisticsList.Add("Number of quad nodes per level: " + GetQuadNodesPerLevel()); StatisticsList.Add("Highest level: " + GetHighestQuadNodeLevel()); StatisticsList.Add("Number of quad meshes rendered per frame: " + _statistics.PreviousNumberOfQuadMeshesRendered); StatisticsList.Add("Number of quad node splits scheduled per interval: " + _statistics.NumberOfSplitsScheduledPerInterval); StatisticsList.Add("Number of quad node splits canceled per interval: " + _statistics.NumberOfSplitsCanceledPerInterval); StatisticsList.Add("Number of pending quad node splits: " + _statistics.NumberOfPendingSplits); StatisticsList.Add("Number of pending quad node merges: " + _statistics.NumberOfPendingMerges); StatisticsList.Add("Camera altitude: " + _statistics.CameraAltitude.ToString("F0") + " m (" + DoubleMathHelper.MetersToFeet(_statistics.CameraAltitude).ToString("F0") + " ft) ASL"); ResetPerIntervalStatistics(); }