c# - 在 Unity 运行时删除重复的顶点

标签 c# algorithm unity3d

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

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

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

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

最佳答案

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

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

关于c# - 在 Unity 运行时删除重复的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15624751/

相关文章:

javascript - 数组中的三个最小数字,没有 Math.min 方法。 Javascript

c# - WWW POST 给我内部服务器错误

c# - 如何在Unity中获得平滑的2D跳跃?

c# - 动态表单控件

algorithm - 估计/预测下载完成时间

c# - 序列化/反序列化嵌套 POCO 属性,而不嵌套在 json.net 中

algorithm - 使用随机队列最小化空间使用

c# - Unity 5.5.2f1 到 5.6.1f1 - 内插字符串错误?

c# - 如何将十进制属性格式化为货币?

c# - C# 中的 Func<TResult> 是什么?