有没有快速射线→表面交叉算法?

时间:2015-06-02 17:59:50

标签: algorithm math 3d language-agnostic raytracing

三角形是具有非常简单的ray→triangle交叉算法的表面,可以通过一些操作完成。出于这个原因,它们通常用作光线跟踪应用的基元 - 例如,网格由三角形的集合近似。问题是,近似越详细,你需要的三角形越多,这意味着更多的测试。如果你的对象是一个完美的球体,那么使用三角形可能不是一个好主意,因为有一个O(1)算法可以用很少的操作直接测试ray→sphere个交叉点。

我的问题是:除了三角化方法之外,还有哪些其他表面具有“更快ray→surface”交点的属性?是否有任何数学结构/对象允许我们近似任意3D对象的表面并检查其在O(1)中的交集?

1 个答案:

答案 0 :(得分:1)

你对自己的形状有什么了解? - 纯粹的密切形式:一些有紧密的解决方案。 - 如果它只是一个三角形汤,你需要一些数据结构来加速:例如网格,八叉树,边界框层次结构,BSP ...... - 如果你可以表达一个势函数或距离函数 - 甚至是近似函数 - 比如隐式曲面,你可以使用二分法得到交点(迭代非常快)。

(或者您可以加入SparseVoxels社区,但这是另一个故事;-))。