예제 #1
0
    void CreateMesh()
    {
        NoiseGen noise = new NoiseGen(octaves, lacunarity, gain, perlinScale);

        vertices = new Vector3[(xSize + 1) * (zSize + 1)];

        for (int i = 0, z = 0; z <= zSize; z++)
        {
            for (int x = 0; x <= xSize; x++)
            {
                // Altering the y value to make uneven terrain
                float y = 4.3f * noise.GetFractalNoise(transform.position.x + x, transform.position.z + z);

                vertices[i] = new Vector3(x, y, z);
                //vertices[i] = new Vector3(x, SamplePerlin(transform.position.x + x, transform.position.z + i), z);

                if (y > maxTerrainHeight)
                {
                    maxTerrainHeight = y;
                }
                if (y < minTerrainHeight)
                {
                    minTerrainHeight = y;
                }
                i++;
            }
        }

        triangles = new int[xSize * zSize * 6];

        int vert = 0;
        int tris = 0;

        // Creates the triangles/quad for the mesh
        for (int z = 0; z < zSize; z++)
        {
            for (int x = 0; x < xSize; x++)
            {
                // First triangle
                triangles[tris + 0] = vert + 0;
                triangles[tris + 1] = vert + xSize + 1;
                triangles[tris + 2] = vert + 1;
                // Second triangle
                triangles[tris + 3] = vert + 1;
                triangles[tris + 4] = vert + xSize + 1;
                triangles[tris + 5] = vert + xSize + 2;

                // 2 triangles make a quad

                vert++;
                tris += 6;
            }
            vert++;
        }

        SetUvs();
        SetVertexColours();
    }