所以我的问题如下: 我有一扇随机门的one网格(意思是可移动的门和框架)。 我想检测门并将其与门框分开,将两者放在不同的网格上。
有人能把我推向正确的方向吗?我应该从哪里开始。
我正在团结一致地工作,需要分离才能旋转门(而不是框架)。
已经用谷歌搜索了一堆,发现了边缘检测、3D 网格分割等。
我对此类问题完全陌生,不知道从哪里开始。
典型的解决方案是计算网格的连接信息,例如翼边/半翼边或等效项。重要的是让你有效地找到相邻的三角形。请注意,这些类型的结构通常需要“形状良好”的网格。我还假设网格采用“索引三角形集”格式。
我没有使用过 unity,但似乎有一个 winged edge 包可能有用。使用“下一个”、“相反”和“面”属性查找任何面的三个相邻三角形。
一个简单且内存效率低的选项可能是使用 MultiValueDictionary 创建从顶点到使用该顶点的所有三角形的映射。
一旦获得连接信息,算法就相当简单,本质上是“洪水填充”分段:
对于每个三角形:
这应该为网格的所有未连接部分提供唯一的分段 ID。您通常会使用单独的数组来跟踪每个三角形的分段 ID。您可以对边或顶点应用相同的原理,并且通过翼边结构使用边可能会更容易。
获得每个三角形的分割 ID 后,用相同的 id 标记三角形的顶点。然后将段的顶点复制到新的顶点列表,同时保留原始索引和新索引之间的映射。然后对三角形执行相同的操作,并使用映射数组来更新每个三角形的顶点索引。