Алгоритм обхода рекурсивного луча - дерево обхода k-d - PullRequest
3 голосов
/ 01 июля 2011

Я выбрал алгоритм обхода на основе стека ( Рекурсивный алгоритм обхода луча ), и у меня возникли небольшие проблемы с его пониманием.

Вот что я понимаю.

Мне нужно найти точку, в которой луч входит в воксель (затем вычислить расстояние до источника луча и эту точку), где он выходит (затем вычислить расстояние между источником и этой точкой), расстояние между происхождение луча и плоскость (в некоторых работах я видел формулу:

(splitPoint - rayOrigin[currentAxle]) / rayOrientation[currentAxle]

Моя лучевая ориентация (0, 0, -1), и тогда в некоторых случаях я буду делиться с нулем (потому что x = 0 и y = 0). Как это может быть?

И в начале алгоритма источник луча находится в главном вокселе, как мне узнать расстояние, на котором луч входит в воксел?

Правильно ли я понимаю? Может кто-нибудь объяснить?

1 Ответ

0 голосов
/ 04 июня 2013

Это из книги "Физически обоснованный рендеринг от теории к реализации".

enter image description here Два случая, когда оба потомка узла не нужно обрабатывать, потому что луч не перекрывает их.

(a) Верхний луч пересекает плоскость расщепления за положением луча t_max и, таким образом, не попадает в дальний ребенок. Нижний луч направлен в сторону от плоскости расщепления, обозначенную отрицательным значением t_split .

(b) Луч пересекает плоскость до значения t_min , указывающего, что ближайший ребенок не нуждается в обработке.

...