public Mesh CreateMeshFromPoints(bool combine)
{
if (spriteRenderer != null && points.Length > 2) {
int pointNum = points.Length;
if (combine && combineMesh != null) {
pointNum = points.Length + combineMesh.vertices.Length;
}
//Create triangle.NET geometry
TriangleNet.Geometry.InputGeometry geometry = new TriangleNet.Geometry.InputGeometry(pointNum);
geometry.AddPolygon(points);
if (combine && combineMesh != null) {
geometry.AddPolygon(combineMesh.vertices.Select(x => (Vector2)x).ToArray());
}
//Triangulate
TriangleNet.Mesh triangleMesh = new TriangleNet.Mesh();
triangleMesh.Triangulate(geometry);
//transform vertices
points = new Vector2[triangleMesh.Vertices.Count];
Vector3[] vertices = new Vector3[triangleMesh.Vertices.Count];
Vector3[] normals = new Vector3[triangleMesh.Vertices.Count];
int n = 0;
foreach(TriangleNet.Data.Vertex v in triangleMesh.Vertices)
{
points[n] = new Vector2((float)v.X, (float)v.Y);
vertices[n] = new Vector3((float)v.X, (float)v.Y, 0);
normals[n]=new Vector3(0,0,-1);
n++;
}
//transform triangles
int[] triangles = triangleMesh.Triangles.ToUnityMeshTriangleIndices();
mesh.Clear();
mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.uv = genUV(mesh.vertices);
mesh.normals = normals;
return mesh;
}
else {
return null;
}
}