Я использую октри с выровненными осями ограничивающие прямоугольники, чтобы сегментировать пространство в моей сцене, где я делаю физическое моделирование. Проблема в том, что сцена очень большая (пространство), и мне нужно обнаружить столкновение больших объектов на больших расстояниях, как а также небольшие объекты на близких расстояниях. Дело в том, что на сцене их всего несколько, но на расстоянии нескольких километров, так что это означает много пустого пространства. Так что в основном я трачу 2 гигабайта ОЗУ для хранения ограничивающих рамок для пустых секторов. Я хотел бы выделить память только для секторов, которые на самом деле содержат что-то (чтобы они были указателями на AABB), но это будет означать тысячи распределений каждого кадра для воссоздания октре. Если я использую пул чтобы противостоять замедлению выделения ресурсов, это все равно будет означать, что я выделяю 2 гигабайта оперативной памяти для своего приложения. Есть ли другой способ добиться этого?
Посмотрите Loose Octrees (для работы со многими объектами) или более адаптивную систему, такую как AABB-деревья, построенные вокруг каждого объекта, а не по одному для всего пространства. Вы можете выполнить общее расстояние / столкновение, используя общую AABB (корень), и получить более точные столкновения, используя дерево под каждым объектом (и, в конечном итоге, тест пересечения луча с треугольником, если вам нужно это точное разрешение). Единственный недостаток AABB-деревьев заключается в том, что если объект вращается, вам необходимо перестроить дерево (вы можете адаптивно масштабировать и переводить AABB-дерево).
Других решений пока нет …