如何在不丢失任何形状的情况下简化基本网格?

How can can I simplify a basic mesh without losing any shape at all?

现在我知道网格简化是人们多年来一直在研究的东西,但我真的不需要您可能想的那种简化。我一直在开发一款大量使用程序网格的游戏。我使用的一种算法有一个缺陷,一个很大的缺陷,它在网格中创建了大量的人工三角形。例如,如果我有一个平坦的正方形平面,并在其上执行此算法,它仍然是一个平坦的正方形平面,但是添加了数千到数百万个无用的三角形。 所以我的问题是如何通过折叠无用的三角形来简化网格,我不关心减少整体多边形数量,只是为了删除所有在平面上并且 100% 无用的三角形。 Heres a example picture of the problem, its a flat side of a cube. 这张图应该很清楚地描述了问题。我正在使用 Unity 和 c#。

我进行了大量研究,并且一直听说有关 Edge Collapse 的信息,但我找不到任何关于此案例的具体信息。 Edge collapse 是正确的使用方法吗?如果是这样,我怎么能在这种情况下实施它呢?所有现有方法都使用它来进行您通常的网格简化。

更新: Heres a short clip showing the Before and After mesh's

我不会在这里建议边缘崩溃。我会做的是:

  1. 计算每个三角形的法线并在共享同一平面(=相同的法线和相同的原点距离)的几个集群(三角形列表)中进行分类。
  2. 对于每个聚类,在连接(或重叠,因为看起来您的图像有重叠)的三角形子聚类中进行分类
  3. 对于每个子集群,计算边界。或者凸包,如果你有重叠的三角形。 可选步骤:检查边界中对齐的 3 个或更多连续顶点,并删除中间顶点。
  4. 对边界进行三角测量。这对于凸包来说是微不足道的,对于非凸边界来说很容易。
  5. 将子簇中的所有三角形与步骤 4 的三角形交换。

简单的凸包三角剖分在于选择一条边并使用该边和包中的所有其他顶点创建三角形。