public void OnEndPolygon()
        {
            // First add vertices and indices for extrusions.
            outputMeshData.AddElements(extrusionVertices, extrusionIndices, options.Material);

            // Then tesselate polygon interior and add vertices and indices.
            var earcut = new Earcut();

            earcut.Tesselate(coordinates.ToArray(), rings.ToArray());

            var vertices = new List <Vector3>(earcut.Vertices.Length / 2);

            for (int i = 0; i < earcut.Vertices.Length; i += 2)
            {
                var v = new Vector3(earcut.Vertices[i], options.MaxHeight, earcut.Vertices[i + 1]);

                v = this.transform.MultiplyPoint(v);

                vertices.Add(v);
            }

            outputMeshData.AddElements(vertices, earcut.Indices, options.Material);

            earcut.Release();
        }
Beispiel #2
0
        public void OnEndPolygon()
        {
            // First add vertices and indices for extrusions.
            outputMeshData.AddElements(extrusionVertices, extrusionUVs, extrusionIndices, options.Material);

            if (coordinates.Count > 0)
            {
                // Then tesselate polygon interior and add vertices and indices.
                var indices = Mapbox.EarcutLibrary.Earcut(coordinates, holes, 2);

                var vertices = new List <Vector3>(coordinates.Count / 2);

                List <Vector2> uvs;

                if (polygonUVs.Count > 0)
                {
                    uvs = polygonUVs;
                }
                else
                {
                    uvs = new List <Vector2>(coordinates.Count / 2);
                    for (int i = 0; i < coordinates.Count; i += 2)
                    {
                        uvs.Add(new Vector2(coordinates[i], coordinates[i + 1]));
                    }
                }

                for (int i = 0; i < coordinates.Count; i += 2)
                {
                    var v = new Vector3(coordinates[i], options.MaxHeight, coordinates[i + 1]);
                    v = this.transform.MultiplyPoint(v);
                    vertices.Add(v);
                }

                outputMeshData.AddElements(vertices, uvs, indices, options.Material);
            }
        }