3

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

我在重复顶点方面遇到了更多麻烦,因为它们需要以某种方式删除,否则网格完全搞砸了。在我最初的尝试之后,我得到了一个包含顶点的对象数组Vector3,并且我能够在一定程度上对其进行操作。似乎删除只是其中的一半,因为在更多地研究网格拓扑之后,似乎我需要在删除另一个之后进行更多的合并。

这是我基本上被卡住的部分。表面上,我认为这将是相当简单的。获取所有需要删除的顶点附加到的三角形,并将三角形重新分配给保留的顶点。但是在实践中并不是那么容易。

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

4

1 回答 1

2

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

我知道这个问题很老,但我想我会尽力帮助其他寻找这个答案的人——我根本不是编程专家,只是认为写这个不会有什么坏处。

于 2016-10-03T17:20:37.000 回答