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);;
        }
Beispiel #5
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();
        }