2016-12-29 3 views
0

Я делаю рендеринг объема. Я успешно прочитал том и у меня есть несколько классов, готовых с моего трассировщика лучей. Теперь проблема заключается в том, как сделать пересечение Ray и Volume (It's is 256 * 256 * 256), чтобы найти координаты «intersectFront» и «intersectBack»?Пересечение громкости в OpenGL

В классе лучей я могу взять начало и направление луча.

Я попытался применить Liang Barsky Algorithm, но не смог придумать, как применить его к коробке (куб/объем).

ответ

0

Похоже, что алгоритм, на который вы ссылаетесь, рассматривает окно обрезки как ориентированное по оси. В случае рендеринга громкости вы можете захотеть манипулировать ориентацией громкости во время визуализации. Это делает куб не осьным.

Кроме того, кажется, что вы делаете лучевое кастинг на процессоре, а не в шейдере openGL. В шейдере OpenGL вычисление точек «intersectFront» и intersectBack очень просто. Вы сначала визуализируете ограничительную рамку тома два раза в текстуру. Первый рендеринг - для лицевых поверхностей, а второй - для задних поверхностей. Вершины ограничивающего прямоугольника окрашены с помощью выровненных по оси координат поля. Затем две текстуры могут перекрываться, чтобы найти луч пересечения в терминах трехмерных текстурных координат. Для получения дополнительной информации, отметьте это сообщение: volume rendering (using glsl) with ray casting algorithm.

Если вы делаете это на процессоре, лучше всего преобразовать куб/рамку назад, чтобы сделать его выровненным по оси вместе с текущим лучом. Затем вы можете применить упомянутый алгоритм Лян Барского, используя расширения окна как x_min, x_max, y_min, y_max, z_min, z_max.

+0

Спасибо за ваш вход. На данный момент я делаю это на процессоре. Теперь предположим, что я не хочу поворачивать громкость. Я просто хотел увидеть свой том (лучевое кастинг). Я не могу получить, как преобразовать его назад и применить Лян Барского. Как раз в моем случае считаю все статичным. Тот же размер, без вращения, одинаковое положение куба. – user3870357

+0

Вам не нужно делать обратное преобразование, если ваш куб уже выровнен по оси и статичен. Просто вычислите линейные уравнения и используйте значения min и max для каждого измерения, чтобы вычислить точки пересечения. – Jadh4v

+0

Или, чтобы получить еще проще, просто используйте орфографическую проекцию. т. е. ваши лучи движутся вдоль оси z. Но я не создам хорошую перспективу. Хотя, это было бы хорошей отправной точкой. – Jadh4v

Смежные вопросы