Beispiel #1
0
        private void GeometryUpdate(TerraTerrainGeometryDataModel geom)
        {
            if (_renderingChunk != null)
            {
                _renderingChunk.OnDataHasChanged -= OnDataHasChanged;
            }
            _renderingChunk = geom;
            _renderingChunk.OnDataHasChanged += OnDataHasChanged;

            RenderGround(geom);
        }
Beispiel #2
0
        private void SetTriangles(TerraTerrainGeometryDataModel chunk, int x, int y, int[] triangles, List <Vector3> vectorTriangles)
        {
            //we are making 2 triangles per loop. so offset goes up by 6 each time
            int triangleOffset = (x * chunk.Height + y) * 6;
            int verticeX       = chunk.Width + 1;
            int verticeY       = chunk.Height + 1;

            //triangle 1
            triangles[triangleOffset]     = x * verticeY + y;
            triangles[1 + triangleOffset] = x * verticeY + y + 1;
            triangles[2 + triangleOffset] = x * verticeY + y + verticeY;

            vectorTriangles.Add(new Vector3(triangles[triangleOffset], triangles[1 + triangleOffset], triangles[2 + triangleOffset]));

            //triangle 2
            triangles[3 + triangleOffset] = x * verticeY + y + verticeY;
            triangles[4 + triangleOffset] = x * verticeY + y + 1;
            triangles[5 + triangleOffset] = x * verticeY + y + verticeY + 1;

            vectorTriangles.Add(new Vector3(triangles[3 + triangleOffset], triangles[4 + triangleOffset], triangles[5 + triangleOffset]));
        }
Beispiel #3
0
        private void RenderGround(TerraTerrainGeometryDataModel chunk)
        {
            if (_renderingPlane == null)
            {
                _renderingPlane = Instantiate(new GameObject(string.IsNullOrEmpty(_generatedGameObjectName) ? "FogOfWar":_generatedGameObjectName), transform);
                _renderingPlane.transform.position = _planeOffset;
                _renderingPlane.AddComponent <MeshRenderer>();
                _renderingPlane.AddComponent <MeshFilter>();
                MeshCollider = _renderingPlane.AddComponent <MeshCollider>();
                ///_renderingPlane.AddComponent<Rigidbody>();
                meshFilter      = _renderingPlane.GetComponent <MeshFilter>();
                meshFilter.mesh = new Mesh();
                Rigidbody rb = _renderingPlane.AddComponent <Rigidbody>();
                rb.isKinematic = true;
            }

            GameObject plane = _renderingPlane;

            plane.SetActive(false);
            plane.GetComponent <Renderer>().material = TerraGameResources.Instance.TerrainMaterial;

            meshFilter = plane.GetComponent <MeshFilter>();
            mesh       = meshFilter.sharedMesh;
            MeshCollider.sharedMesh = meshFilter.sharedMesh;
            int verticiesLength = (chunk.Width + 1) * (chunk.Height + 1);

            Vector3[] vertices = new Vector3[verticiesLength];
            Color[]   colors   = new Color[vertices.Length];
            Vector2[] uvs      = new Vector2[vertices.Length];
            Vector3[] normals  = new Vector3[vertices.Length];
            float[]   grass    = new float[vertices.Length];
            // Vector2[] triangles = new Vector2[(int)(dimensions.Area * 2)];

            //for every point, there is 2 triangles, equaling 6 total vertices
            int[] triangles = new int[(int)((chunk.Width * chunk.Height) * 6)];

            //Create Vertices
            for (int x = 0; x < chunk.Width; x++)
            {
                for (int y = 0; y < chunk.Height; y++)
                {
                    Color color = GetColor(x, y);

                    int position = (x * (chunk.Width + 1)) + y;
                    vertices[position] = chunk[x, y];
                    colors[position]   = color;
                    uvs[position]      = new Vector2((float)x / (float)chunk.Width, (float)y / (float)chunk.Height);
                    normals[position]  = Vector3.up;
                    grass[position]    = 0.5f;
                }
            }

            List <Vector3> vectorTriangles = new List <Vector3>();

            //Create Triangles
            for (int x = 0; x < chunk.Width; x++)
            {
                for (int y = 0; y < chunk.Height; y++)
                {
                    SetTriangles(chunk, x, y, triangles, vectorTriangles);
                }
            }

            mesh.Clear();
            mesh.vertices  = vertices;
            mesh.triangles = triangles;
            mesh.uv        = uvs;
            mesh.colors    = colors;
            mesh.normals   = normals;

            plane.SetActive(true);
            mesh.RecalculateNormals();
            mesh.RecalculateBounds();
            mesh.RecalculateTangents();
            plane.SetActive(false);
            plane.SetActive(true);
        }