在封闭网格上去除被遮挡的面

7
我需要删除封闭三角网格内部的一些隐藏面。我已经找到了使用MeshLab进行此操作的方法,但存在两个问题:1)该文章说在某些情况下可能会失败(您能想象出哪些情况吗?),2)我想以编程方式执行它(您是否知道任何现有实现?)。我甚至不知道这种简化筛选器的名称。 如有任何提示,我将不胜感激。

它被称为遮挡剔除(或背面剔除,很难从你的问题中确定。这两种方法都在那篇文章中描述了)。 - BlueRaja - Danny Pflughoeft
但是这些剔除算法不是与相机的视口相关联吗?我需要一个通用的简化过滤器来删除封闭表面内部的内容...也许只需检查所有顶点并查看是否在网格内部或外部,然后删除“内部”顶点,我不知道,你有看到任何不便之处吗? - Federico
在这种情况下,只需进行简单的三维泛洪填充,并删除未被填充的任何面。 - BlueRaja - Danny Pflughoeft
2个回答

2

最显然的(但几乎肯定不是最有效的)算法如下:

  1. 考虑网格中的一个三角形。在三角形的三个顶点和相机点之间画三条线。(如果相机无限远,则只考虑视点方向。)
  2. 如果所有绘制的线与三角剖分表面相交,则不显示正在考虑的三角形。如果只有一些相交,则部分显示该三角形。
  3. 重复考虑所有网格中的三角形。

0
你想要做的是一次性删除几何图形内部的面。
如果只想从一个方向查看对象,则Roman的解决方案可能是可以接受的。但如果旋转相机,则非可见表面可能会变得可见,因此这不是一个可接受的解决方案。
使用泛洪算法可以处理多维数组,但它也适用于三维坐标吗?由于表面不总是(int)并且具有其他倾斜角度而不是(1,0,0),(0,1,0)(0,0,1),因此在我看来,这种方法也行不通。
算法可能失败的情况: 计算的遮挡值告诉您您的表面的顶点是否在对象内部。但是:尽管所有顶点都在对象内部,表面的一部分仍然可能显示出来。 考虑这个例子:您有三个升起的物体,每个物体都含有一个顶点。虽然顶点没有显示出来,但它们之间延伸的表面部分可见。
我自己无法帮助您,因为我也正在寻找可以做到这一点的算法。
问候

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