Exemple #1
0
        /** Pass in the constructor from the poisson-disk-sampling module */
        public MeshBuilder addPoisson(float spacing, Rander.RandFloat rng)
        {
            var generator = new PoissonDiskSampling(new int[] { 1000, 1000 }, spacing, 0, 0, rng);

            foreach (var p in this.points)
            {
                generator.addPoint(new Float[] { p[0], p[1] });
            }
            this.points = generator.fill();
            return(this);
        }
Exemple #2
0
        public PointsData(int seed, int width, int height, float mountainSpacing, float spacing)
        {
            var shape        = new int[] { width, height };
            var poissonPeaks = new PoissonDiskSampling(shape, mountainSpacing, 0, 0, Rander.makeRandFloat(seed)).fill();

            var generator = new PoissonDiskSampling(shape, spacing, 0, 0, Rander.makeRandFloat(seed));

            foreach (var p in poissonPeaks)
            {
                generator.addPoint(p);
            }
            var mesh      = generator.fill();
            var tmpPoints = new int[mesh.Count];
            var indexs    = new int[mesh.Count];

            for (int i = 0; i < indexs.Length; ++i)
            {
                var p = mesh[i];
                tmpPoints[i] = ((int)p[0]) << 16 | (int)p[1];
                indexs[i]    = i;
            }
            Array.Sort(tmpPoints, indexs);

            points = new UInt16[tmpPoints.Length][];
            peaks  = new UInt16[poissonPeaks.Count];

            int count = 0;

            for (int i = 0; i < indexs.Length; ++i)
            {
                var p = tmpPoints[i];
                points[i] = new UInt16[] { (UInt16)((p >> 16) & 0xffff), (UInt16)(p & 0xffff) };
                if (indexs[i] < peaks.Length)
                {
                    peaks[count++] = (UInt16)i;
                }
            }
        }