我在3D空间中有成千上万个OOBBs(面向对象的边界框),它们包含简单的细长的3D网格,紧密地挤在一起。我想将光线射入其中,并确定哪些OOBBs被击中。由于我需要执行大量的光线交叉测试(数百万次),对所有OOBBs进行暴力搜索是不够的。最初,我认为可以使用某种空间划分系统来快速缩小潜在结果的范围,但是像BVHs或KDTrees这样的系统依赖于AABBs(轴对齐边界框)以加快查询速度,在我的情况下,这些方法非常低效(因为我紧密打包的OOBBs由于所包含的网格的对角线特性而具有大致相同的AABB)。我了解了RAPID库中的OBBTrees,但似乎它们是自上而下构建的(从多边形soup开始,逐渐将OOBBs分成越来越小的组以形成树),而不是自下而上构建的(从大量OOBBs开始并从中构建树)。是否有其他数据结构可用于加速我的交叉测试?
这是我OOBBs的一张图片。如您所见,它们紧密地排列在一起,如果您可以想象出它们的AABB会是什么样子,您会发现它们会重叠到一个基于AABB的树不会真正提高性能的程度(因为几乎所有的OOBB都会被射穿整个组的光线击中)。
值得注意的是,我需要查询被光线击中的所有OOBB,而不仅仅是第一个/最近的一个。
这是我OOBBs的一张图片。如您所见,它们紧密地排列在一起,如果您可以想象出它们的AABB会是什么样子,您会发现它们会重叠到一个基于AABB的树不会真正提高性能的程度(因为几乎所有的OOBB都会被射穿整个组的光线击中)。
值得注意的是,我需要查询被光线击中的所有OOBB,而不仅仅是第一个/最近的一个。