How to quickly check beam intersections against a tight OOBB group?

I have thousands of OOBBs (object oriented bounding rectangles) in 3d space that span simple elongated 3d grids. They are tightly packed together.

I would like to shoot beams at them and find out which OOBB fall. Due to the number of ray crossing tests I need to perform (millions), brute force approach against all OOBBs will not be sufficient.

Initially, I thought it would be easy to use some kind of spatial partitioning system to quickly narrow down potential results, but systems like BVH or KDTrees rely on AABB (with fields aligned along the axis) to speed up queries, and in my case they will being very inefficient (because many of my tightly packed OOBBs have roughly the same AABB due to the diagonal nature of the mesh that they cover).

I read about OBBTrees in the RAPID library, but it seems that they are built from top to bottom (start with the polygon soup and divide into gradually smaller OOBB groups to form a tree), and not from bottom to top (start with a lot of OOBB and build a tree from them).

Are there any other data structures that I can use to speed up my intersection tests?

OOBB. , , , AABB, , , AABB ( ).

, OOBB, , / .

OOBBs

+6
1

, 3d- . (, ..) oob, . 8 , . , .

, , , . , , .


, , ( ). . (z-order curve )

+1

Source: https://habr.com/ru/post/1016924/


All Articles