コード例 #1
0
    void GenerateMap()
    {
        var startTime = DateTime.Now;

        points = BlueNoiseGenerator.PoissonDiscSampling(rMin, rMax, 30, mapSize);
        List <Vertex> scaffolding = BlueNoiseGenerator.Scaffolding(mapSize);

        points.AddRange(scaffolding);

        var duration = DateTime.Now - startTime;

        Debug.Log("SeedPoints Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        List <Triangle> convexPoly = Triangulation.TriangulateConvexPolygon(scaffolding);

        triangles = Triangulation.TriangleSplittingAlgorithm(points, convexPoly);
        //triangles = Triangulation.IncrementalAlgorithm(points);

        duration = DateTime.Now - startTime;
        Debug.Log("Triangulation Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        triangles = DelaunayTriangulation.MakeTriangulationDelaunay(triangles);

        duration = DateTime.Now - startTime;
        Debug.Log("Delaunayification Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        triangles = DelaunayTriangulation.FillInNeighbours(triangles);

        duration = DateTime.Now - startTime;
        Debug.Log("Neighbours Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        // fill heightmap into y coordinates
        points = HeightField.PerlinIsland(points, mapSize, 0.1f, 0.7f, 4f, 3f, 6);

        duration = DateTime.Now - startTime;
        Debug.Log("Heightmap Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        triangles = Voronoi.GenerateCentroids(triangles, points);

        duration = DateTime.Now - startTime;
        Debug.Log("Centroids Done in " + duration.TotalSeconds + "s");
        startTime = DateTime.Now;

        cells = CellMeshCreator.SpawnMeshes(points, cell);

        duration = DateTime.Now - startTime;
        Debug.Log("Meshes Done in " + duration.TotalSeconds + "s");

        var camHeight = mapSize * 0.5f / Mathf.Tan(Camera.main.fieldOfView * 0.5f * Mathf.Deg2Rad);

        Camera.main.transform.position = new Vector3(mapSize / 2, camHeight * 1.1f, mapSize / 2);

        //DebugDraw();
    }
コード例 #2
0
ファイル: MapGenerator.cs プロジェクト: gl4tsch/MapGenerator
    public void GenerateMap(float mapSize, float delaunayRMin)
    {
        blueNoisePoints = UniformPoissonDiskSampler.SampleCircle(Vector2.zero, mapSize / 2, delaunayRMin);
        delaunator      = new Delaunator(blueNoisePoints.ToPoints());

        DrawDelaunay();
        DrawVoronoi();

        // fill heightmap into y coordinates
        cellPoints = HeightField.PerlinIsland(blueNoisePoints, mapSize, 0.1f, 0.7f, 4f, 3f, 6);

        map = new Map(cellPoints.Count);
        SpawnCells(delaunator, cellPoints);

        var camHeight = mapSize * 0.5f / Mathf.Tan(Camera.main.fieldOfView * 0.5f * Mathf.Deg2Rad);

        Camera.main.transform.position = new Vector3(0, camHeight * 1.1f, 0);
    }