我需要删除封闭三角网格内部的一些隐藏面。我已经找到了使用MeshLab进行此操作的方法,但存在两个问题:1)该文章说在某些情况下可能会失败(您能想象出哪些情况吗?),2)我想以编程方式执行它(您是否知道任何现有实现?)。我甚至不知道这种简化筛选器的名称。 如有任何提示,我将不胜感激。
最显然的(但几乎肯定不是最有效的)算法如下: 考虑网格中的一个三角形。在三角形的三个顶点和相机点之间画三条线。(如果相机无限远,则只考虑视点方向。) 如果所有绘制的线与三角剖分表面相交,则不显示正在考虑的三角形。如果只有一些相交,则部分显示该三角形。 重复考虑所有网格中的三角形。
你想要做的是一次性删除几何图形内部的面。如果只想从一个方向查看对象,则Roman的解决方案可能是可以接受的。但如果旋转相机,则非可见表面可能会变得可见,因此这不是一个可接受的解决方案。使用泛洪算法可以处理多维数组,但它也适用于三维坐标吗?由于表面不总是(int)并且具有其他倾斜角度而不是(1,0,0),(0,1,0)(0,0,1),因此在我看来,这种方法也行不通。算法可能失败的情况: 计算的遮挡值告诉您您的表面的顶点是否在对象内部。但是:尽管所有顶点都在对象内部,表面的一部分仍然可能显示出来。 考虑这个例子:您有三个升起的物体,每个物体都含有一个顶点。虽然顶点没有显示出来,但它们之间延伸的表面部分可见。我自己无法帮助您,因为我也正在寻找可以做到这一点的算法。问候