如何统一关闭网格?

时间:2019-07-17 13:25:23

标签: unity3d runtime mesh fill

我的项目是:用户可以用手指画图,然后在此基础上生成一个场。

我已经从用户绘图中得到了: enter image description here enter image description here 因此,这是一连串的网格,但尚未闭合。我只是沿一个高度生成一个方向的网格。 在需要关闭它中。我不想看穿它。

我的问题是:此图是随机的,因此存在凸部而不是凸部。让我们说明一下:

1-首先,我在网格的每个点上放了一个黄色的圆圈(我有每个(x,y,z)坐标的点列表) enter image description here

2-然后,接下来每3个点尝试制作一个网格: enter image description here

当我们要填充的形状是凹形时可以,但是(如果是凸形的话)(我认为)会出错: enter image description here  当网格太大时,还会出现这种错误: enter image description here

最后,我只想能够闭合任何形状。我希望我很清楚。

1 个答案:

答案 0 :(得分:0)

所以答案是使用Triangulation Algorithm,我使用此仓库https://github.com/mattatz/unity-triangulation2D 只需添加到您的代码中即可:

 using mattatz.Triangulation2DSystem;

,您可以从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;