在Unity中运行时删除重复的顶点

时间:2013-03-25 21:05:58

标签: c# algorithm unity3d

在我的Unity项目中,我有一个需要大量优化的动态网格系统。目前我正在寻找一种算法来通过在运行时删除重复顶点来优化网格(网格被组合成一个巨大的网格)。删除占用相同空间的重复面很容易,因为如果它们在阈值内共享相同的空间(因为它们不会显示),它们都可以安全地删除。

我在使用重复顶点方面遇到了一些麻烦,因为它们需要以某种方式移除或者网格完全混乱。在我最初尝试之后,我得到了一个包含顶点的Vector3个对象数组,我能够在一定程度上操纵它。看起来删除只是它的一半,因为在更多地考虑网状拓扑之后,我似乎需要在删除另一个之后做更多的合并。

这是我基本上陷入困境的部分。看起来,我觉得这很简单。获取需要移除的顶点的所有三角形,并将三角形重新分配给保留的顶点。但实际上并不容易。

首先,有更简单的方法吗?我很惊讶Unity在某处没有合并顶点脚本,或者至少是一个例子。其次,有更好的方法,怎么样?我遇到了空间哈希,然而,我仍然停留在我以某种方式合并顶点的部分。第三,合并实际顶点。我该如何以最有效的方式解决这个问题?

1 个答案:

答案 0 :(得分:2)

在这种情况下使用HashSet会有用吗?对于那些不了解的人来说,HashSet就像一个列表,但在搜索元素时要快得多。由于HashSet的性质,它们无法存储重复项。将顶点存储在HashSet中可能意味着不会添加任何重复项,几乎没有处理能力。

我知道这个问题已经过时了,但我想我会尽力帮助其他人寻找这个答案 - 我根本不是编程专家,只是认为写这个不会伤害