Я работаю над вокселизацией, используя конвейер рендеринга, и теперь я успешно вокселизирую сцену, используя вершинные + геометрия + фрагментные шейдеры. Теперь мои воксели хранятся в 3D-текстуре, которая имеет размер, например, 128x128x128.
Моя оригинальная модель сцены центрирована на (0,0,0) и распространяется как по положительной, так и по отрицательной оси. Текстура, однако, центрирована в (63,63,63) в текстовых координатах.
Я реализовал простую маркировку лучей для визуализации, но она не учитывает движения камеры (я могу рендерить только из очень фиксированных положений, потому что мой луч должен быть сгенерирован с учетом различных координат 3D-текстуры).
Мой вопрос: как я могу отобразить мои лучи так, чтобы они генерировались в точке Po с направлением D в координатах моей 3D-модели, но пересекать вокселы в соответствующей позиции в координатах текстуры, и каждое движение камеры в трехмерном мире переназначен в координатах вокселя?
Прямо сейчас я генерирую лучи следующим образом:
создать четырехугольник перед камерой в позиции (63,63, -20)
направить лучи в направлении (63,63,3)
Я думаю, что вы должны хранить всю матрицу преобразования вида в единообразных параметрах вашего шейдера. Затем для каждого выполнения шейдера вы можете использовать его экранные координаты и преобразование вида, чтобы вычислить направление луча вида для вашего конкретного пикселя.
Имея направление луча и положение камеры, вы просто используете их так же, как в настоящее время.
Есть также другой способ сделать это, который вы можете попробовать:
Допустим, у вас есть куб (0,0,0) -> (1,1,1), и для каждого угла вы назначаете цвет в зависимости от его положения, например, (1,0,0) красный и т. Д.
Теперь для каждого кадра вы рисуете свои передние грани куба для текстуры, а задние грани куба для второй текстуры.
В финальном рендеринге вы можете использовать обе текстуры, чтобы получить enter
а также exit
3D-векторы уже находятся в текстурном пространстве, что делает ваш конечный шейдер намного проще.
Вы можете прочитать лучшие описания здесь:
http://graphicsrunner.blogspot.com/2009/01/volume-rendering-101.html