接上篇《基于HalfEdge模型加面算法分析(1)》
6.Connect next/previous halfedges
连接 半边指向下一半边 半边的前半边 的关系,这是最复杂的一步,有多种出现情况,下面我们分情况讨论:

情况1:Both edges are new
要连接的两边边都是新边

faceHalfedges[i].Opposite.Previous = faceHalfedges[j].Opposite;
faceHalfedges[j].Opposite.Next = faceHalfedges[i].Opposite;
情况2:This is new, next is old
当前边是新边,下一条不是新边,如图三角形1是已经构建过的了

faceHalfedges[i].Opposite.Previous = faceHalfedges[j].Previous;
faceHalfedges[j].Previous.Next = faceHalfedges[i].Opposite;
情况3: This is old, next is new
当前边是旧边,下一条是新边,如下图,三角形1是已经构建过的了

faceHalfedges[i].Next.Previous = faceHalfedges[j].Opposite;
faceHalfedges[j].Opposite.Next = faceHalfedges[i].Next;
情况4: Both edges are new and vertex has faces connected already
两条边都是新的且顶点已经有面连接了,如图三角形已经构建过了,对于中间的顶点来说已经连接了面1

Halfedge closeHalfedge = null;
// Find the closing halfedge of the first available opening
foreach (Halfedge h in faceVertices[j].Halfedges)
{
if (h.Face == null)
{
closeHalfedge = h;
break;
}
}
Debug.Assert(closeHalfedge != null);
Halfedge openHalfedge = closeHalfedge.Previous;
// Link new outer halfedges into this opening
faceHalfedges[i].Opposite.Previous = openHalfedge;
openHalfedge.Next = faceHalfedges[i].Opposite;
faceHalfedges[j].Opposite.Next = closeHalfedge;
closeHalfedge.Previous = faceHalfedges[j].Opposite;
三 新构建好的三角形面(半边数据)已经添加到模型中,渲染出来,加面算法完成
本文详细解析了HalfEdge模型中连接新旧半边的四种复杂情况,包括两边皆新、一边新一边旧及特殊场景下的连接逻辑,并最终完成了三角形面的构建。
1073

被折叠的 条评论
为什么被折叠?



