在过去的几周里,我一直在研究一种算法,该算法可以找到复杂网格的隐藏曲面并将其移除。这些隐藏的表面完全被遮挡,永远不会被看到。由于我正在使用的网格的性质,有大量这些隐藏的三角形。在某些情况下,隐藏表面比可见表面更多。由于手动删除它们对于较大的网格来说是禁止的,我希望用软件自动执行此操作。
我目前的算法包括:
然而,这种算法引起了很多悲痛。这是非常不一致的。虽然算法没有发现一些“被遮挡”的面被遮挡,但我更担心由于当前实现的问题而被删除的非常明显的面。因此,我想知道两件事,主要是:
注意:这是一个对象空间算法。也就是说,可以从任何角度看 - 而不是固定的摄像头。
答案 0 :(得分:2)
我实际上从未实现过光线跟踪,但无论如何我都有一些建议。由于您的目标是检测每个隐藏的三角形,您可以转动问题,而不是找到每个可见的三角形。
我正在考虑以下两种方式:
或
最后一个优点是,如果可以可靠地读/写像素,使用图形API实现它应该相对便宜。
两者的缺点是需要的分辨率。不应该剔除的小开口内的三角形可能仍然是,因此光线的数量可能是禁止的(在第一种算法中)或者你将需要非常大的屏幕外帧缓冲区(在第二种中)。
答案 1 :(得分:1)
可能有所帮助的一些想法。