Форум OMPF - правильное место для этого вопроса, но так как я здесь сегодня ...
Не используйте пересечение лучей / блоков для обхода OctTree. Вы можете использовать его для корневого узла дерева, но это все. Как только вы знаете расстояние до входа и выхода корневого блока, вы можете вычислить расстояния до плоскостей разбиения x, y и z - плоскостей, которые делят блок. Если расстояние до передней и задней части равно f и b соответственно, то вы можете определить, какие дочерние узлы блока будут поражены, проанализировав расстояния f, b, x, y, z. Вы также можете определить порядок прохождения дочерних узлов и полностью отклонить многие из них.
Можно ударить не более 4 детей, поскольку луч начинается с одного октанта и меняет октанты только тогда, когда он пересекает одну из трех плоскостей разбиения.
Кроме того, поскольку он становится рекурсивным, вам понадобятся расстояния входа и выхода для дочерних узлов. Эти расстояния выбираются из набора (f, b, x, y, z), который вы уже вычислили.
Я оптимизировал это в течение очень долгого времени, и могу с уверенностью сказать, что у вас есть на порядок производительность для деревьев на многих уровнях. Я начал прямо там, где ты сейчас.