Exemplo n.º 1
0
    private void GenerateOceanMesh()
    {
        // Remove old chunks
        if (parentOceanChunks)
        {
            DestroyImmediate(parentOceanChunks.gameObject);
        }

        if (!shapeSettings.ocean)
        {
            return;
        }

        if (!parentOceanChunks)
        {
            parentOceanChunks        = new GameObject("Ocean Chunks").transform;
            parentOceanChunks.parent = transform;
        }

        if (shapeGenerator == null)
        {
            Debug.LogError("no shape generator");
        }
        ocean = new PlanetMeshChunkRenderer(parentOceanChunks, shapeGenerator, PlanetMeshChunkRenderer.ShapeType.Sphere);
    }
Exemplo n.º 2
0
    private void GenerateTerrainMesh()
    {
        // Remove old chunks
        if (parentTerrainChunks)
        {
            DestroyImmediate(parentTerrainChunks.gameObject);
        }

        if (!parentTerrainChunks)
        {
            parentTerrainChunks        = new GameObject("Terrain Chunks").transform;
            parentTerrainChunks.parent = transform;
        }

        if (shapeGenerator == null)
        {
            Debug.LogError("no shape generator");
        }
        terrain = new PlanetMeshChunkRenderer(parentTerrainChunks, shapeGenerator, PlanetMeshChunkRenderer.ShapeType.Noise);
    }
Exemplo n.º 3
0
    public void Create(PlanetMeshChunkRenderer _renderer, List <Vector3> _vertices)
    {
        texture  = new Texture2D(textureResolution, 1);
        vertices = _vertices;
        count++;
        gameObject.name = $"Chunk {count}";

        meshRenderer = GetComponent <MeshRenderer>();
        meshRenderer.receiveShadows = false;
        vertices = new List <Vector3> {
            _vertices[0], _vertices[1], _vertices[2]
        };
        triangles = new List <int>();

        var settings = _renderer.shapeSettings;

        if (_renderer.shapeType == PlanetMeshChunkRenderer.ShapeType.Noise)
        {
            meshRenderer.material = settings.terrainMaterial;
        }


        if (_renderer.shapeType == PlanetMeshChunkRenderer.ShapeType.Sphere)
        {
            meshRenderer.material = settings.oceanMaterial;
        }

        var chunkTriangles = settings.chunkTriangles;

        if (_renderer.shapeType == PlanetMeshChunkRenderer.ShapeType.Sphere)
        {
            chunkTriangles = settings.oceanTriangles;
        }

        SubdivideFace(0, 1, 2, chunkTriangles);

        var radius = settings.radius;
        //var renderOffset = settings.renderOffset;
        var renderOffset = Vector3.zero;

        for (int i = 0; i < vertices.Count; i++)
        {
            vertices[i] = vertices[i].normalized;

            switch (_renderer.shapeType)
            {
            case PlanetMeshChunkRenderer.ShapeType.Noise:
                Vector3 seaLevel  = vertices[i] * radius * (1 + settings.oceanDepth);
                float   elevation = _renderer.shapeGenerator.CalculateAdditionalElevation(vertices[i]) * _renderer.shapeGenerator.amplitude;
                vertices[i] = renderOffset + seaLevel + vertices[i] * elevation;
                _renderer.shapeGenerator.elevationMinMax.AddValue((1 + settings.oceanDepth) * radius + elevation);
                break;

            case PlanetMeshChunkRenderer.ShapeType.Sphere:
                vertices[i] = renderOffset + vertices[i] * radius * (1 + settings.oceanDepth);
                break;
            }
        }

        mesh = new Mesh();
        GetComponent <MeshFilter>().sharedMesh = mesh;
        mesh.vertices  = vertices.ToArray();
        mesh.triangles = triangles.ToArray();
        mesh.normals   = vertices.Select(s => s.normalized).ToArray();

        gameObject.SetActive(false);
    }