我需要删除一些隐藏的面,在一个封闭的三角形网格内。我已经找到了一种使用MeshLab的方法,但是有两个问题:1)文章说它在某些情况下可能会失败(你能想象在哪些情况下?)和2)我想以编程的方式做到这一点(你知道任何现有的实现吗?)。我甚至不知道这种简化过滤器的名字。
最明显的(但几乎肯定不是最有效的)算法如下:
- 考虑网格中的一个三角形。在三角形的三个顶点和相机点之间画三条线。(如果相机距离无限远,只需考虑视点的方向)。
- 如果绘制的所有线条与三角曲面相交,则不显示所考虑的三角形。如果只有部分显示,则部分显示三角形。
- 对网格中的所有三角形重复。
你要做的是一劳永逸地删除几何图形内的面。
如果你只想从一个方向看物体,罗马人的解决方案可能是可以接受的。因为不可见的表面可能会变得可见,如果你旋转相机,这是一个不可接受的解决方案。使用洪填充与多维数组工作,但它也与3D坐标工作吗?由于曲面并不总是(int),并且具有与(1,0,0),(0,1,0)(0,0,1)(0,0,1)不同的倾角,因此在我看来,这种方法也不起作用。
算法可能失败的情况:计算的遮挡值告诉你表面的顶点是否在物体内部。然而:尽管所有的顶点都在物体内部,表面的一部分还是会显示出来。考虑一下:您有三个提升对象,每个对象都包含一个顶点。虽然没有显示顶点,但它们之间的表面是部分可见的。
我自己不能帮助你,因为我也在寻找一个算法,可以做到这一点。
与