private void GenerateTerrainTriangles(List <Vector2> points, out List <Vector2> vertices, out List <int> triangles) { var imesh = new GenericMesher().Triangulate(points.Select(toVertex).ToList()); var idToIndex = new Dictionary <int, int>(); vertices = new List <Vector2>(); triangles = new List <int>(); foreach (var triangle in imesh.Triangles) { if (!caveSystem.insideCave(PSPolygon.GetCenter(triangle.vertices.Select(toVector2).ToList()))) { foreach (var v in triangle.vertices.Reverse()) { if (!idToIndex.ContainsKey(v.ID)) { idToIndex.Add(v.ID, vertices.Count); vertices.Add(toVector2(v)); } triangles.Add(idToIndex[v.ID]); } } } }