// Start is called before the first frame update
    void Start()
    {
        voxelGen     = GetComponent <VoxelGen>();
        terrainArray = new int[chunkSize, chunkSize, chunkSize];

        voxelGen.Initialise();
        InitTerrain();
        CreateTerrain();
        voxelGen.UpdateMesh();
    }
Esempio n. 2
0
File: MapGen.cs Progetto: sash-a/Orb
    static void generateVoxels()
    {
        string spherePath = "Assets/Resources/Voxels/Sphere.prefab";

        createSpherePrimitive(spherePath);
        var sphere = AssetDatabase.LoadAssetAtPath <GameObject>(spherePath);

        if (sphere == null)
        {
            Debug.LogError("shpere null either can't find or mesh filter is empty please regenerate in folder:\n" +
                           "Assets/Resources/Voxels/Sphere.prefab");
            return;
        }

        copyMesh(sphere);
        vertices = mesh.vertices;
        VoxelGen.genVolumeTriangles();

        for (int i = 0; i < mesh.subMeshCount; i++)
        {
            int[]   triangles = mesh.GetTriangles(i);
            Vector3 v1        = new Vector3();
            Vector3 v2        = new Vector3();
            Vector3 v3        = new Vector3();

            for (int j = 0; j < triangles.Length; j++)
            {
                if (j % 3 == 0)
                {
                    v1 = vertices[triangles[j]];
                }

                if (j % 3 == 1)
                {
                    v2 = vertices[triangles[j]];
                }

                if (j % 3 == 2)
                {
                    //finished triangle
                    v3 = vertices[triangles[j]];
                    GenTriangles(v1, v2, v3, splits);
                }
            }
        }

        AssetDatabase.DeleteAsset(spherePath);
        LinkMeshs.linkMeshs();
    }
Esempio n. 3
0
File: MapGen.cs Progetto: sash-a/Orb
    private static void GenTriangles(Vector3 v1, Vector3 v2, Vector3 v3, int rec)
    {
        if (rec == 0)
        {
            //Debug.Log("generating innermost voxel");
            VoxelGen v = new VoxelGen(v1, v2, v3, 0, columnID);
            columnID++;
        }
        else
        {
            int      longest;
            double[] dists = new double[3];
            dists[0] = Vector3.Distance(v1, v2);
            dists[1] = Vector3.Distance(v2, v3);
            dists[2] = Vector3.Distance(v3, v1);
            Vector3 midPoint;
            if (dists[0] < dists[1])
            {
                //0 out
                if (dists[2] < dists[1])
                {
                    //2 out
                    longest = 1;
                }
                else
                {
                    //1 out
                    longest = 2;
                }
            }
            else
            {
                //1 out
                if (dists[2] < dists[0])
                {
                    //2 out
                    longest = 0;
                }
                else
                {
                    //0 out
                    longest = 2;
                }
            }

            if (longest == 0)
            {
                midPoint = (v1 + v2) / 2;
                GenTriangles(midPoint, v2, v3, rec - 1);
                GenTriangles(midPoint, v3, v1, rec - 1);
            }

            if (longest == 1)
            {
                midPoint = (v2 + v3) / 2;
                GenTriangles(midPoint, v1, v2, rec - 1);
                GenTriangles(midPoint, v3, v1, rec - 1);
            }

            if (longest == 2)
            {
                midPoint = (v3 + v1) / 2;
                GenTriangles(midPoint, v2, v3, rec - 1);
                GenTriangles(midPoint, v1, v2, rec - 1);
            }
        }
    }