我正在做一个项目,该项目需要将三角形汤转换为实际的结构化网格,以便将操作应用于网格。网格对象是一个半边型结构,具有以下项目:
Vertex { vec3 position, int edge /* any half edge leaving the vertex */}
HalfEdge {int vertex, int pair}
Triangle {int vertex[3], int normal[3]}
BoundaryEdge {int vertex, int pair, int next, int prev}
在这些项目的数组中,所有内容都由索引引用。我已经到了连接所有内部边缘并设置所有边缘和边界边缘对的地步,我遇到的问题是如何设置边界边缘循环的下一个和上一个索引(即,如何找到这些从未连接的边界边列表中循环)。
如果循环都很简单,那就很容易了;但是,我正在使用的网格可以具有边界“连接点”,即共享一个顶点的多个边界循环。这使得在创建边界循环时存在一些点,算法必须决定多个可能的边中的哪一个是循环中正确的下一个边。如果选择了错误的边,则可能无法遍历与顶点相关的所有边。
到目前为止,我所拥有的是,每次遇到这样的连接时,代码基本上都会分别查看离开和进入顶点的半边的下一个和上一个索引的所有可能分配,并找到第一个分配它因此,从离开顶点的任何半边开始,可以通过使用 edge.pair.next 访问每隔一个这样的半边(并且只有这些边)以到达下一个这样的半边。目前,该解决方案并不太有效(我不认为),我什至不知道它是否正确,并且添加与 1 个或更少三角形相邻的三角形也存在同样的问题。
我想知道,a.) 我的解决方案是否真的有效,以及 b.) 是否有另一种更常见/使用的解决方案来找到我还没有找到的这些边缘循环?