/** 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); }
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; } } }