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