Data structures kd树的交集检验

Data structures kd树的交集检验,data-structures,geometry,raytracing,Data Structures,Geometry,Raytracing,我目前对kd树的理解是;在每个节点上,我们将我们的点分成两个相等大的组,用于一个轴 我们遍历各个轴,直到树饱和 当然,这种数据结构对于光线跟踪应用程序来说很有趣,因为我们不必搜索每个三角形面来测试我们与光线的相交,我们只需知道三角形与光线相交的可能位置 我对如何做到这一点有些疑问 我们如何处理无法轻松拆分的奇怪三角形(与其他三角形相交的三角形或跨越整个三角形) 我们是在三角形上分割还是在顶点上分割? 我们如何准确地测试从相机发出的光线的交点? 我看到了几种方法。首先,我们可以从场景和分割平面构

我目前对kd树的理解是;在每个节点上,我们将我们的点分成两个相等大的组,用于一个轴

我们遍历各个轴,直到树饱和

当然,这种数据结构对于光线跟踪应用程序来说很有趣,因为我们不必搜索每个三角形面来测试我们与光线的相交,我们只需知道三角形与光线相交的可能位置


我对如何做到这一点有些疑问

我们如何处理无法轻松拆分的奇怪三角形(与其他三角形相交的三角形或跨越整个三角形)

我们是在三角形上分割还是在顶点上分割?

我们如何准确地测试从相机发出的光线的交点?


我看到了几种方法。首先,我们可以从场景和分割平面构建边界框,并测试与这些框的交点,或者我们可以测试与分割平面的交点,并查看交点相对于相机的位置。简单的回答是:这一切取决于您的应用程序。有几种方法kd树的变异

我们如何处理无法轻松拆分的奇怪三角形? 我相信你指的是为给定的一组三角形选择分割平面。这是一个非常困难的优化问题,通常通过启发式方法解决。例如,你可以沿着一个轴对三角形的质心进行排序,并选择中值作为分割平面。没有什么可以阻止你实现更多的集成聪明的标准

如果您发现分割平面穿过一个基本体,您有两个选择。要么分割基本体,要么将其添加到两个子树中。您应该做什么取决于您的应用程序

我们是在三角形上分割还是在顶点上分割? 这取决于要添加到树中的基本体。如果要使用树进行光线投射,则在树中包含三角形是有意义的。kd树是一个非常通用的概念,适用于任何类型的基本体。例如,它们也广泛用于点云

我们如何准确地测试从相机发出的光线的交点? 通过遍历树来完成此操作。因此,从根节点开始,检查光线是否与关联的边界框(即整个空间)相交。然后检查两个子树中的哪一个子树首先与光线相交,然后继续此子树。然后重复:测试与节点的AABB相交(从拆分平面增量生成)。如果光线未与AABB相交,则立即返回到父节点。如果相交,则继续到第一个子节点。从第一个子节点返回时,转到第二个子节点(除非已找到相交点)


有关更多详细信息,我建议您查看kd树的特定于应用程序的实例。

我会在不同的帖子上询问您的每个问题(显然,这些问题可能没有琐碎的解决方案)。此外,这个问题最好在上问。@nbro当我键入“交叉点测试kd树”时,您是否愿意提供一个链接进入谷歌这篇文章是最好的结果,第二,请不要再编辑这篇文章,你只是让它更难阅读,第三,因为所有问题都与kd树交叉测试的高度特定主题有关,我不认为用三个问题淹没提问队列是有益的,有意义的,接受!如果这是由你的研究领域可能有“简单”的光线跟踪去噪吗?你说的去噪是什么意思?光线跟踪通常不会产生明显的噪声。我认为它在非常低的采样率(<16 spp)下会产生噪声.我不想再占用你的时间了,我只是想既然你知道你在说什么,你可能手头上有一些关于这个问题的资料,你可能指的是路径跟踪。光线跟踪中每像素多个样本给你的是反走样。我手头上没有任何资料,但最初的几个谷歌结果看起来很好omising(您可能已经找到):,。此外,如果您想看到kd树正在运行,请查看。