OpenGL / GLSL: Какой лучший алгоритм для визуализации облаков / дыма из объемных данных? - PullRequest
3 голосов
/ 07 апреля 2010

Я хотел бы визуализировать объемные данные 3D: плотность (можно сопоставить с альфа-каналом), температуру (можно сопоставить с RGB). В настоящее время я моделирую проекцию максимальной интенсивности, например: рендеринг самого плотного / непрозрачного пикселя в конце. Но этот метод теряет восприятие глубины.

Я бы хотел имитировать эффект, как огонь внутри дыма.

Так что мой вопрос в том, какие методы в OpenGL генерируют изображения на основе доступных данных?

Любая идея приветствуется.

Спасибо, Арман.

1 Ответ

3 голосов
/ 08 апреля 2010

Сначала я бы попробовал заклинатель объемных лучей.

Вы можете воспользоваться Google "Volume Visualization With Ray Casting", и это даст вам большую часть того, что вам нужно.У NVidia есть отличный пример (с использованием openg) приведения лучей через 3D-текстуру.

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

Если ваш объем не помещается в видеопамять, вы можете выполнить отливку лучей по частям, а затем выполнить шаг композиции.

Краткое описание приведения лучей:

CPU: 1) Визуализируйте шестигранный куб в мировом пространстве как примитив для рисования, убедитесь, что вы используете глубинную выборку.

Вершинный шейдер: 2) В вершинном шейдере сохраните положение вершин в мире (это будет интерполироватьfragmet)

Фрагментный шейдер: 3) Используйте интерполированное положение минус положение камеры, чтобы получить вектор обхода через объем.4) Используйте цикл while, чтобы пройти объем от точки на кубе до другой стороны.3 способа узнать, когда закончить.А) на каждом шаге проверяйте, находится ли точка в кубе.Б) сделать пересечение луча с кубом и рассчитать расстояние между пересечениями.C) сделать предварительный рендеринг куба с отбраковкой лицевой стороны и сохранить глубины во второй текстурной карте, а затем просто sampe в пикселе экрана, чтобы получить расстояние.

5) накапливаться, пока вы зацикливаетесь и устанавливаете цвет пикселя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...