Raycasting / raytracing октодерева - лучшее пересечение лучей / листьев без рекурсии

Может ли кто-нибудь дать короткое и приятное объяснение (или предложить хорошее учебное пособие) о том, как направить луч на октодерево вокселя без рекурсия?

У меня есть сложная модель, запеченная в октодерево, и мне нужно найти лучший / ближайший лист, который пересекает луч. Стандартный итеративный обход дерева при детализации:

  1. Захватить корневой узел
  2. Проверить пересечение
  3. Нет? Выход
  4. Да? Найти дочерний элемент, который пересекает луч, ближайший к источнику луча
  5. Цикл, пока я не достигну листа или не выйду из дерева

Всегда возвращает лист, но в тех случаях, когда дерево хранит, скажем, ландшафт, ближайший к нему узел источник луча не обязательно содержит наиболее подходящий лист. Это не удивительно - более высокие объекты в более удаленных узлах не будут протестированы с использованием этого подхода.

Я могу сделать это рекурсивно, найдя все пересекающиеся листья в дереве, отсортировав их по расстоянию и выбрав ближайший к лучу. должность. Однако это происходит медленно и требует рекурсии.

Я немного читал об использовании линейного алгоритма Брезенхема для обхода дерева, который, кажется, требует, чтобы каждый узел содержал указатели на соседних соседей, но я не понимаю, как это сделать. реализовать это полезным способом.

Есть предложения? Я могу подделать стек в HLSL, используя массив фиксированной длины или структуру с элементом для каждой потенциальной записи стека, но требования к памяти для этого могут стать критическими при достаточно большом дереве.

Справка.

5
задан skaffman 5 May 2012 в 11:03
поделиться