如何检测开放网格三维模型的边界顶点?

9
有两种表面网格模型,一种是封闭网格,如球体或立方体,另一种是开放网格模型,这意味着模型的表面不在一个封闭的环上。它从某个地方打开,比如空心管道。
因此,我想检测开放网格模型的边界顶点。封闭环网格中没有边界,但在开放网格中,我们必须检测边界顶点以进行某些平滑、细分等操作。
请建议我如何选择/检测边界顶点?最佳方法是什么?通过比较三角形的边缘来给我一些想法?
谢谢。
2个回答

12
假设你有一个多孔网格,那么该网格的边界是指属于一个多边形的边缘。不位于边界上的边缘将属于两个多边形。边界顶点是属于边界边缘的顶点。
一种找到边界顶点的简单方法是遍历所有边缘,计算它们属于多少个多边形,如果它们只属于一个多边形,则收集边缘的顶点作为边界顶点。您需要从集合中删除重复的顶点。
第二种方法是将您的网格数据结构检查每个边缘添加到网格中,或者当多边形附加到特定边缘时。通过这种方式,网格数据结构可以为您保留最新的边界边缘列表,这样在需要边缘时就不必每次都找到它们。这将大大减少确定边界边缘的开销,尽管插入边缘和多边形会略微更昂贵。您的网格数据结构还将占用更多内存。

谢谢。我明白你的意思了。我在想可能有另一种方法来计算边缘。 - maxpayne
1
我明白了!我添加了第二个方法,它讨论了缓存边框边缘。也许这会有所帮助? - River
是的,这真的很好。我没有考虑过这个。我正在添加三角形并更新整个网格,那么为什么不更新边缘信息呢?我试图计算它,但这确实是一种内存消耗大的方法。但我肯定会尝试的。 - maxpayne
是的,它可能会消耗大量内存,特别是对于具有许多边界空间的大型网格。但它也可以大大加快速度!祝你好运 :) - River
嗨,如果网格具有所有边缘,但缺少一些内部面,怎么办?因此,如果我们只找到度为1的边缘,则可以收集这些丢失的面的顶点。也许还有一种方法可以考虑顶点位置? - June Wang

6
假设您的网格是二维(或二点五维)规则、构造良好的三角剖分。您可以使用这些属性:http://graphics.stanford.edu/courses/cs468-10-fall/LectureSlides/02_Basics.pdf 第9页定义了顶点的度数(或价值)为相邻边的数量。如所示,所有边界顶点都有4个相邻边。“内部”顶点具有5个相邻边。
第17页定义了一个边界边缘为仅与一个面相邻的边。
您可能会发现第22页关于闭合二维曲面三角网格的讨论很有帮助。

这个演示对我非常有帮助。谢谢。我已经实现了这个算法,它运行良好。谢谢。 - maxpayne
为什么不呢,但我不知道在哪里接受它...这很有趣,但实际上我试图找到那个按钮... - maxpayne
看起来你接受了另一个答案。祝你的项目好运 :) - Throwback1986

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接