Я делаю объем рендеринга. Я успешно прочитал том и у меня мало готовых уроков от моего лучевого трассировщика. Теперь проблема в том, как сделать пересечение луча и тома (его размер составляет 256 * 256 * 256), чтобы найти координаты intersectFront и intersectBack?
В моем классе лучей я могу определить происхождение и направление луча.
Я пытался подать заявку Алгоритм Ляна Барского но не может придумать, как применить его для коробки (куб / объем).
Похоже, что алгоритм, на который вы ссылаетесь, считает окно отсечения выровненным по оси. В случае рендеринга тома вы можете манипулировать ориентацией тома во время визуализации. Это делает куб неосевым.
Также кажется, что вы выполняете приведение лучей на процессоре, а не в шейдере openGL. В шейдере openGL вычисление точек ‘intersectFront’ и intersectBack ‘очень просто. Сначала вы визуализируете ограничивающую рамку тома два раза в текстуру. Первый рендеринг предназначен для передних граней, а второй — для задних граней. Вершины ограничивающего прямоугольника окрашены с использованием выровненных по оси координат прямоугольника. Затем две текстуры могут накладываться друг на друга, чтобы найти луч пересечения в терминах трехмерных координат текстуры.
Для более подробной информации, проверьте этот пост:
объемный рендеринг (с использованием glsl) с алгоритмом приведения лучей.
Если вы делаете это на процессоре, лучше всего преобразовать куб / ограничивающий прямоугольник обратно, чтобы выровнять его по оси вместе с текущим лучом.
Затем вы можете применить упомянутый алгоритм Ляна Барского, используя расширения поля как x_min, x_max, y_min, y_max, z_min, z_max.
Других решений пока нет …