LexaGC
LexaGC

Reputation: 130

How to close a mesh in unity?

My projet is : user could draw with finger and I generate a field base on that.

I already got that from the user drawing : enter image description hereenter image description here So this is a succession of mesh but it's not close. I just generate the mesh in one direction with some height. In need to close it. I don't want to be able the see through it.

My problem is : this drawing is random, so there is convexe and not convexe part . Let's illustrate that :

1- First I put a yellow circle on each point from my mesh ( I have this list of point with each (x,y,z) coordinate) enter image description here

2- Then, with each 3 point following I try to make a mesh : enter image description here

It's Ok when the shape we want to fill is concave but it will (I think) bug if the shape is convex : enter image description here And there is also this kind of bug, when the mesh is too big : enter image description here

At the end, I just want to be able to close any shape I have. I hope I'm clear.

Upvotes: 0

Views: 1150

Answers (1)

LexaGC
LexaGC

Reputation: 130

So the answer was to use Triangulation Algorithm , I use this repo https://github.com/mattatz/unity-triangulation2D Just add to your code :

 using mattatz.Triangulation2DSystem;

and you could launch the example from the github repo :

// input points for a polygon2D contor
List<Vector2> points = new List<Vector2>();

// Add Vector2 to points
points.Add(new Vector2(-2.5f, -2.5f));
points.Add(new Vector2(2.5f, -2.5f));
points.Add(new Vector2(4.5f, 2.5f));
points.Add(new Vector2(0.5f, 4.5f));
points.Add(new Vector2(-3.5f, 2.5f));

// construct Polygon2D 
Polygon2D polygon = Polygon2D.Contour(points.ToArray());

// construct Triangulation2D with Polygon2D and threshold angle (18f ~ 27f recommended)
Triangulation2D triangulation = new Triangulation2D(polygon, 22.5f);

// build a mesh from triangles in a Triangulation2D instance
Mesh mesh = triangulation.Build();
// GetComponent<MeshFilter>().sharedMesh = mesh;

Upvotes: 1

Related Questions