c – 网格简化:边缘折叠条件

c – 网格简化:边缘折叠条件,第1张

概述我试图通过进行一系列边缘折叠来实现网格简化算法.目前,我正在浏览每个三角形,然后折叠最短的边缘,算法是稳定的(不会超出界限).但超越一点,它开始创造破碎(洞)的文物.确定边缘是否可折叠的正确方法是什么,这样才不会导致非流形伪影(或网格)? 注意:我使用半边数据结构.另外,我不想使用任何外部库,如OpenMesh或CGAL.我有理由不使用它们. 边缘崩溃有两个主要条件: 连接 在折叠边的每一侧,只能 我试图通过进行一系列边缘折叠来实现网格简化算法.目前,我正在浏览每个三角形,然后折叠最短的边缘,算法是稳定的(不会超出界限).但超越一点,它开始创造破碎(洞)的文物.确定边缘是否可折叠的正确方法是什么,这样才不会导致非流形伪影(或网格)?

注意:我使用半边数据结构.另外,我不想使用任何外部库,如OpenMesh或Cgal.我有理由不使用它们.

解决方法 边缘崩溃有两个主要条件:

连接

在折叠边的每一侧,只能合并一对边.这可以通过计算两个合并顶点的联合邻居顶点来检查(必须恰好有两个).
请考虑下面的示例,其中红色边缘正在折叠:

橙色和青色边缘之间的三角形不再是多面体.

几何

在边缘坍塌期间,三角形不得翻转.这可以通过计算翻转之前的三角形法线与保持三角形的翻转之间的角度来检查.

这是一个在崩溃期间翻转绿色三角形法线的示例:

总结

以上是内存溢出为你收集整理的c – 网格简化:边缘折叠条件全部内容,希望文章能够帮你解决c – 网格简化:边缘折叠条件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存