Exemplo n.º 1
0
    MeshData GetMeshData()
    {
        var result = new MeshData
        {
            vertices  = new List <Vector3>(),
            uvs       = new List <Vector2>(),
            triangles = new List <int>(),
            colors    = new List <Color>()
        };

        for (var z = 0; z <= planet.shapeSettings.nbVertices; z++)
        {
            for (var x = 0; x <= planet.shapeSettings.nbVertices; x++)
            {
                float px = (float)x / planet.shapeSettings.nbVertices;
                float pz = (float)z / planet.shapeSettings.nbVertices;

                Vector3 vx = left * (px * size);
                Vector3 vz = forward * (pz * size);

                Vector3 pointOnCube   = position + vx + vz;
                Vector3 pointOnSphere = pointOnCube.normalized;

                var uv = new Vector2(climateGenerator.Evaluate(pointOnSphere), shapeGenerator.Evaluate(pointOnSphere));

                Vector3 vertex = pointOnSphere * ((1 + uv.y) * planet.shapeSettings.planetRadius);

                float moisture = uv.x.Remap(climateGenerator.moistureMinMax.Min, 0.0f,
                                            climateGenerator.moistureMinMax.Max, 1.0f);

                float elevation = uv.y.Remap(shapeGenerator.elevationMinMax.Min, 0.0f,
                                             shapeGenerator.elevationMinMax.Max, 1.0f);

                result.vertices.Add(vertex);
                result.uvs.Add(uv);

                Color colorBiome = climateGenerator.GetColorFromBiome(elevation, moisture, Mathf.Abs(vertex.y - planet.transform.position.y) / planet.shapeSettings.planetRadius);

                result.colors.Add(colorBiome);
            }
        }

        for (int vi = 0, y = 0; y < planet.shapeSettings.nbVertices; y++, vi++)
        {
            for (var x = 0; x < planet.shapeSettings.nbVertices; x++, vi++)
            {
                result.triangles.Add(vi);
                result.triangles.Add(vi + planet.shapeSettings.nbVertices + 1);
                result.triangles.Add(vi + 1);
                result.triangles.Add(vi + 1);
                result.triangles.Add(vi + planet.shapeSettings.nbVertices + 1);
                result.triangles.Add(vi + planet.shapeSettings.nbVertices + 2);
            }
        }

        return(result);
    }