Отображение вокселей с помощью шейдеров в openGL

Я работаю над вокселизацией, используя конвейер рендеринга, и теперь я успешно вокселизирую сцену, используя вершинные + геометрия + фрагментные шейдеры. Теперь мои воксели хранятся в 3D-текстуре, которая имеет размер, например, 128x128x128.

Моя оригинальная модель сцены центрирована на (0,0,0) и распространяется как по положительной, так и по отрицательной оси. Текстура, однако, центрирована в (63,63,63) в текстовых координатах.

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

Мой вопрос: как я могу отобразить мои лучи так, чтобы они генерировались в точке Po с направлением D в координатах моей 3D-модели, но пересекать вокселы в соответствующей позиции в координатах текстуры, и каждое движение камеры в трехмерном мире переназначен в координатах вокселя?

Прямо сейчас я генерирую лучи следующим образом:
создать четырехугольник перед камерой в позиции (63,63, -20)
направить лучи в направлении (63,63,3)

1

Решение

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

Есть также другой способ сделать это, который вы можете попробовать:

Допустим, у вас есть куб (0,0,0) -> (1,1,1), и для каждого угла вы назначаете цвет в зависимости от его положения, например, (1,0,0) красный и т. Д.

Теперь для каждого кадра вы рисуете свои передние грани куба для текстуры, а задние грани куба для второй текстуры.

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

Вы можете прочитать лучшие описания здесь:

http://graphicsrunner.blogspot.com/2009/01/volume-rendering-101.html

http://web.cse.ohio-state.edu/~tong/vr/

1

Другие решения


По вопросам рекламы [email protected]