Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity中删除运行时重复的顶点_C#_Algorithm_Unity3d - Fatal编程技术网

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

C# 在Unity中删除运行时重复的顶点,c#,algorithm,unity3d,C#,Algorithm,Unity3d,在我的Unity项目中,我有一个需要大量优化的动态网格系统。目前,我正在寻找一种算法,通过在运行时删除重复的顶点来优化网格(网格合并成一个巨大的网格)。删除占用相同空间的重复面相当容易,因为如果它们在阈值内共享相同空间(因为它们不会显示),则可以安全地删除它们 我在重复顶点方面遇到了更多的麻烦,因为它们需要以某种方式删除,否则网格会完全混乱。在我第一次尝试之后,我得到了一个包含顶点的Vector3对象数组,我能够在一定程度上操纵它。似乎删除只是其中的一半,因为在深入研究网格拓扑之后,似乎在删除另

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

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

这就是我被困的地方。看起来,我认为这会相当简单。获取需要删除的顶点附着到的所有三角形,并将这些三角形重新指定给保留的顶点。然而,在实践中这并不是那么容易


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

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


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

Unity 4之后,在Droid和iOS发布的设置中,他们有一个名为“优化网格”的通用复选框。我不知道它是否会优化到你上面所说的程度。您是在为移动平台优化顶点以增加FPS,还是为web项目/单机版优化顶点?只是好奇..@AmitApollo这个项目是针对桌面的,它被用来在运行时构建网格。如果愿意,基本上是一个级别编辑器,但它主要由基于网格的元素组成。我正在组合网格,因此移除面(这比顶点容易得多)和顶点将带来相当大的性能提升。我不明白你到底是如何获得重复顶点的。你能解释一下吗?@Xerosigma当然可以。正如我在之前的评论中所说,用户将以完全动态的方式放置网格。然后将这些网格合并为一个静态网格,可以在3D中实时查看。我希望优化组合网格将具有的所有重复顶点/面。想象两个立方体被用户打碎在一起。当我优化它时,我将删除两个看不到的面(即重复的面),但仍有重复的顶点彼此之间的距离约为0.01f。检测和合并这些顶点是我遇到的难题。@user81572不想增加问题,但您应该知道Unity是如何处理的。Unity沿UV接缝使用重复顶点。例如,添加一个Unity立方体,您将看到它有24个顶点,而不是8个。对于创建八叉树,有助于降低重复搜索的复杂性。