public PrecomputedChunkCollection PrecomputeChunk()
    {
        ///---Shader setup---
        //--Kernals
        int sampleHandler     = samplerShader.FindKernel("PrecomputeChunkSampler");
        int caseShaderHandler = caseShader.FindKernel("PrecomputeChunkCase");

        //--Textures
        //-Lerp
        sampler_texture = CreateTexture(18, 18 * 18);
        samplerShader.SetTexture(sampleHandler, "DebugImage", sampler_texture);

        //-Case
        caseNumber_texture = CreateTexture(16, 16 * 16);
        caseShader.SetTexture(caseShaderHandler, "CaseNumber_Texture", caseNumber_texture);

        //--Float Arrays
        //-Lerp
        BufferPair samples = SetupComputeBuffer(sampleHandler, samplerShader, "SampleField", 18 * 18 * 18);

        //-Case
        BufferPair caseNumbers = SetupComputeBuffer(caseShaderHandler, caseShader, "CaseNumber_Floats", 16 * 16 * 16);

        //--Setting Offsets
        SetupShaderOffsets(samplerShader);
        SetupShaderOffsets(caseShader);

        //--Dispatch
        samplerShader.Dispatch(sampleHandler, 18 / 6, 18 / 6, 18 / 6);
        caseShader.Dispatch(caseShaderHandler, 16 / 8, 16 / 8, 16 / 8);

        //--Returning Textures
        sampler_material.mainTexture    = sampler_texture;
        caseNumber_material.mainTexture = caseNumber_texture;

        //--Fetch data for method return
        FetchArrayData(samples);
        FetchArrayData(caseNumbers);
        PrecomputedChunkCollection collection = new PrecomputedChunkCollection();

        collection.samples     = samples.array;
        collection.caseNumbers = caseNumbers.array;

        return(collection);
    }
Example #2
0
    public Mesh GenerateMesh()
    {
        sampler = new ChunkPrecomputer(samplerShader, caseNumberShader);

        collection = sampler.PrecomputeChunk();

        listOfVectors   = new List <Vector3>();
        listOfTriangles = new List <int>();
        hashedVectors   = new Dictionary <Vector3, int>();
        hashedIndex     = 0;

        Vector3 position = new Vector3();

        for (int x = 0; x < 16; x++)
        {
            position.x = x;
            for (int y = 0; y < 16; y++)
            {
                position.y = y;
                for (int z = 0; z < 16; z++)
                {
                    position.z = z;

                    March(position);
                }
            }
        }

        Mesh mesh = new Mesh();

        Debug.Log("Number of Vectors : " + listOfVectors.Count);
        Debug.Log("Vectors : " + listOfVectors);
        mesh.SetVertices(listOfVectors);
        Debug.Log("Number of Triangles : " + listOfTriangles.Count);
        Debug.Log("Triangles : " + listOfTriangles);
        mesh.SetTriangles(listOfTriangles, 0);
        mesh.RecalculateNormals();
        mesh.RecalculateBounds();
        mesh.RecalculateTangents();


        return(mesh);
    }