Geometry 简单C/C++;三角形相交加速结构库

Geometry 简单C/C++;三角形相交加速结构库,geometry,raytracing,code-reuse,kdtree,Geometry,Raytracing,Code Reuse,Kdtree,我正在进行光线跟踪,希望通过一些加速结构(kd树、BVH等)来加速光线跟踪。我不想自己编代码。到目前为止,我所尝试的: 将kd树从pbrt中拉出。有太多的内部依赖关系,如果不将所有的pbrt都放到我的代码中,我就无法成功地实现这一点 CGAL的AABB树。令人沮丧的是,这似乎只返回交叉点。在不知道点来自哪个三角形的情况下,我无法有效地在三角形上插值颜色。我很想用颜色扩展“点”的概念,但如果不从头开始编写大量模板代码,这似乎是不可能的 我自己写。好吧,我写了我自己的网格加速类,它是有效的,但它令

我正在进行光线跟踪,希望通过一些加速结构(kd树、BVH等)来加速光线跟踪。我不想自己编代码。到目前为止,我所尝试的:

  • 将kd树从pbrt中拉出。有太多的内部依赖关系,如果不将所有的pbrt都放到我的代码中,我就无法成功地实现这一点

  • CGAL的AABB树。令人沮丧的是,这似乎只返回交叉点。在不知道点来自哪个三角形的情况下,我无法有效地在三角形上插值颜色。我很想用颜色扩展“点”的概念,但如果不从头开始编写大量模板代码,这似乎是不可能的

  • 我自己写。好吧,我写了我自己的网格加速类,它是有效的,但它令人讨厌,效率低下


所以,如果有人能推荐一个简单的库,我会非常感谢!我所需要的是一个三角形汤和光线,找到最近的交点并返回该三角形的索引。

Jaco Bikker编写了以下系列教程:

他们非常有帮助,他在最后包含了使用kd树的光线跟踪器的代码


您可能可以使用它。

具有光线跟踪实现。但不知道它的效率有多高。在没有库的其他部分的情况下使用树实现应该不会太麻烦。

我最终从头开始编写了自己的,但这看起来是一个很好的参考。谢谢出于兴趣:您实现了k-d树吗?你的结果是什么?不,它更像是一个“稍微聪明一点”的网格,省去了一些代码,因为我总是在网格内部为我的应用程序启动。在最好的情况下,与暴力相比,它的速度提高了20倍左右,但对网格单元的大小非常敏感。这通常是基于网格的方法的一个问题。干得好!