Ejemplo n.º 1
0
    public void Create(ChunkProcessor.Process process)
    {
        Destroy(meshFilter.mesh);

        Mesh mesh = new Mesh();

        mesh.vertices  = process.chunk.data.vertices;
        mesh.triangles = process.chunk.data.triangles;

        mesh.RecalculateBounds();
        mesh.RecalculateNormals();

        grassMesh.GetComponent <MeshFilter>().mesh = meshCollider.sharedMesh = meshFilter.mesh = mesh;
    }
    public static void Generate(Thread thread, ChunkProcessor.Process process)
    {
        process.flag = ChunkProcessor.Flag.Processing;

        Marching mcubes = new MarchingCubes();

        mcubes.Surface = 0;

        float[] voxels = new float[(int)(Chunk.RESOLUTION * Chunk.RESOLUTION * Chunk.RESOLUTION)];

        GeometricalSchemaTemplate temp = new GeometricalSchemaTemplate();

        temp.Init();

        for (int x = 0; x < Chunk.RESOLUTION; x++)
        {
            for (int y = 0; y < Chunk.RESOLUTION; y++)
            {
                for (int z = 0; z < Chunk.RESOLUTION; z++)
                {
                    temp.Feed(x, y, z, process.chunk.data.position.x, process.chunk.data.position.y, process.chunk.data.position.z);
                    voxels[x + y * Chunk.RESOLUTION + z * Chunk.RESOLUTION * Chunk.RESOLUTION] = temp.Voxel();
                }
            }
        }
        List <Vector3> verts   = new List <Vector3>();
        List <int>     indices = new List <int>();

        mcubes.Generate(voxels, Chunk.RESOLUTION, Chunk.RESOLUTION, Chunk.RESOLUTION, verts, indices);

        process.chunk.data.vertices  = verts.ToArray();
        process.chunk.data.triangles = indices.ToArray();

        process.flag    = ChunkProcessor.Flag.Ready;
        process.success = true;
        thread.Abort();
    }