【问题标题】:How can can I simplify a basic mesh without losing any shape at all?如何在不丢失任何形状的情况下简化基本网格?
【发布时间】:2019-11-23 13:30:29
【问题描述】:

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

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

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

【问题讨论】:

  • 能否提供一个最小的代码示例?
  • 什么?产生结果的算法?由于合同,我不允许分享它。但我可能会提供一个带有此错误的 3d 模型。结果只是一个正常的破碎 3d 模型,所有表面上都有很多三角形。
  • 你在问如何折叠边缘?
  • 可能,我不确定折叠边缘是否是我需要的,因为我不是 100% 确定它是什么。
  • 另一种说法是,我想简化共享飞机的 tris。

标签: c# unity3d mesh simplify


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-01-11
    • 2023-03-08
    • 1970-01-01
    • 2023-04-05
    • 2022-01-14
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多