示例#1
0
    void InitializeBuffers()
    {
        VertCount = 10 * 10 * 10 * cubeMultiplier * cubeMultiplier * cubeMultiplier;

        outputBuffer = new ComputeBuffer(VertCount, (sizeof(float) * 3) + (sizeof(int) * 6));
        mapBuffer    = new ComputeBuffer(VertCount, sizeof(int));

        int width  = 10 * cubeMultiplier;
        int height = 10 * cubeMultiplier;
        int depth  = 10 * cubeMultiplier;

        TestNoise noise = new TestNoise(1f, 1f, 3);

        float[][] tempNoiseHeight = new float[10 * cubeMultiplier][];
        for (int i = 0; i < tempNoiseHeight.Length; i++)
        {
            tempNoiseHeight[i] = new float[10 * cubeMultiplier];

            for (int j = 0; j < tempNoiseHeight[i].Length; j++)
            {
                tempNoiseHeight[i][j] = noise.GetNoise((double)(i) * 0.05, (double)(j) * 0.14, 0.0) * 0.5f + 0.5f; //UnityEngine.Random.Range(0f, 1f);
            }
        }

        int[] map = new int[VertCount];

        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                for (int z = 0; z < depth; z++)
                {
                    int idx = x + (y * 10 * cubeMultiplier) + (z * 10 * cubeMultiplier * 10 * cubeMultiplier);

                    if (tempNoiseHeight[x][z] >= y / (float)height)
                    {
                        map[idx] = 1;
                    }
                    else
                    {
                        map[idx] = 0;
                    }
                }
            }
        }

        mapBuffer.SetData(map);

        computeShader.SetBuffer(CSKernel, "outputBuffer", outputBuffer);
        computeShader.SetBuffer(CSKernel, "mapBuffer", mapBuffer);

        computeShader.SetVector("group_size", new Vector3(cubeMultiplier, cubeMultiplier, cubeMultiplier));

        if (Debugrender)
        {
            PointMaterial.SetBuffer("buf_Points", outputBuffer);
        }

        transform.position -= (Vector3.one * 10 * cubeMultiplier) * 0.5f;
    }
示例#2
0
    void SetBuffers()
    {
        //outputBuffer = new ComputeBuffer(VertCount, (sizeof(float) * 3) + (sizeof(int) * 6));
        //mapBuffer = new ComputeBuffer(VertCount, sizeof(int));

        int width  = 10 * cubeMultiplier;
        int height = 10 * cubeMultiplier;
        int depth  = 10 * cubeMultiplier;

        TestNoise noise = new TestNoise(1f, 1f, 3);

        float[][] tempNoiseHeight = new float[10 * cubeMultiplier][];
        for (int i = 0; i < tempNoiseHeight.Length; i++)
        {
            tempNoiseHeight[i] = new float[10 * cubeMultiplier];

            for (int j = 0; j < tempNoiseHeight[i].Length; j++)
            {
                tempNoiseHeight[i][j] = noise.GetNoise(((double)(i) + (double)(Time.time * 0.16)) * 0.05, (double)(j) * 0.14 + (double)(Time.time * 0.005), (double)(Time.time * 0.01)) * noiseMag + 0.5f; //UnityEngine.Random.Range(0f, 1f);
            }
        }

        int[] map = new int[VertCount];

        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                for (int z = 0; z < depth; z++)
                {
                    int idx = x + (y * 10 * cubeMultiplier) + (z * 10 * cubeMultiplier * 10 * cubeMultiplier);

                    if (tempNoiseHeight[x][z] >= y / (float)height)
                    {
                        map[idx] = 1;
                    }
                    else
                    {
                        map[idx] = 0;
                    }
                }
            }
        }

        mapBuffer.SetData(map);

        //computeShader.SetBuffer(CSKernel, "outputBuffer", outputBuffer);
        computeShader.SetBuffer(CSKernel, "mapBuffer", mapBuffer);
    }
    void InitializeBuffers() {
        VertCount = 10 * 10 * 10 * cubeMultiplier * cubeMultiplier * cubeMultiplier;

        outputBuffer = new ComputeBuffer(VertCount, (sizeof(float) * 3) + (sizeof(int) * 6));
        mapBuffer = new ComputeBuffer(VertCount, sizeof(int));

        int width = 10 * cubeMultiplier;
        int height = 10 * cubeMultiplier;
        int depth = 10 * cubeMultiplier;

        TestNoise noise = new TestNoise(1f, 1f, 3);
        float[][] tempNoiseHeight = new float[10 * cubeMultiplier][];
        for(int i = 0; i < tempNoiseHeight.Length; i++) {
            tempNoiseHeight[i] = new float[10 * cubeMultiplier];

            for(int j = 0; j < tempNoiseHeight[i].Length; j++) {
                tempNoiseHeight[i][j] = noise.GetNoise((double)(i) * 0.05, (double)(j) * 0.14, 0.0) * 0.5f + 0.5f; //UnityEngine.Random.Range(0f, 1f);
            }
        }

        int[] map = new int[VertCount];

        for(int x = 0; x < width; x++) {
            for(int y = 0; y < height; y++) {
                for(int z = 0; z < depth; z++) {
                    int idx = x + (y * 10 * cubeMultiplier) + (z * 10 * cubeMultiplier * 10 * cubeMultiplier);

                    if (tempNoiseHeight[x][z] >= y / (float)height)
                        map[idx] = 1;
                    else
                        map[idx] = 0;
                }
            }
        }

        mapBuffer.SetData(map);

        computeShader.SetBuffer(CSKernel, "outputBuffer", outputBuffer);
        computeShader.SetBuffer(CSKernel, "mapBuffer", mapBuffer);

        computeShader.SetVector("group_size", new Vector3(cubeMultiplier, cubeMultiplier, cubeMultiplier));

        if (Debugrender)
            PointMaterial.SetBuffer("buf_Points", outputBuffer);

        transform.position -= (Vector3.one * 10 * cubeMultiplier) * 0.5f;
    }
    void SetBuffers() {
        //outputBuffer = new ComputeBuffer(VertCount, (sizeof(float) * 3) + (sizeof(int) * 6));
        //mapBuffer = new ComputeBuffer(VertCount, sizeof(int));

        int width = 10 * cubeMultiplier;
        int height = 10 * cubeMultiplier;
        int depth = 10 * cubeMultiplier;

        TestNoise noise = new TestNoise(1f, 1f, 3);
        float[][] tempNoiseHeight = new float[10 * cubeMultiplier][];
        for (int i = 0; i < tempNoiseHeight.Length; i++) {
            tempNoiseHeight[i] = new float[10 * cubeMultiplier];

            for (int j = 0; j < tempNoiseHeight[i].Length; j++) {
                tempNoiseHeight[i][j] = noise.GetNoise(((double)(i) + (double)(Time.time * 0.16)) * 0.05, (double)(j) * 0.14 + (double)(Time.time * 0.005), (double)(Time.time * 0.01)) * noiseMag + 0.5f; //UnityEngine.Random.Range(0f, 1f);
            }
        }

        int[] map = new int[VertCount];

        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                for (int z = 0; z < depth; z++) {
                    int idx = x + (y * 10 * cubeMultiplier) + (z * 10 * cubeMultiplier * 10 * cubeMultiplier);

                    if (tempNoiseHeight[x][z] >= y / (float)height)
                        map[idx] = 1;
                    else
                        map[idx] = 0;
                }
            }
        }

        mapBuffer.SetData(map);

        //computeShader.SetBuffer(CSKernel, "outputBuffer", outputBuffer);
        computeShader.SetBuffer(CSKernel, "mapBuffer", mapBuffer);
    }