Настройка лучей в CUDA с использованием OpenGL-поставляемых матриц - PullRequest
4 голосов
/ 15 июля 2011

Я работаю над проектом, где я переношу свой код CUDA для использования в качестве модуля в большое приложение, которое поддерживает свое собственное состояние OpenGL.Мой модуль в основном представляет собой объем рендеринга.Теперь я сталкиваюсь с проблемой, заключающейся в том, что мне нужно настроить лучи средства визуализации громкости, чтобы точно имитировать камеру OpenGL, чтобы мое средство визуализации громкости соответствовало остальной части визуализированной сцены.

В точке, где моя CUDAкод называется есть матрица просмотра (без матрицы просмотра модели) и набор матрицы проекции.Я уже извлек параметры фрустума и положение камеры в мировом пространстве.

u *= -c_pp.right;
v *= -c_pp.top;

Ray eyeRay;
eyeRay.o = make_float3(c_camPosition); //origin
eyeRay.d = normalize(make_float3(u, v, -c_pp.near)); //direction

u и v - это нормализованные экранные координаты от -1 до 1.c_pp описывает усеченный вид, используя top, right и near.Сейчас я ищу соответствующую матрицу, с которой мне нужно умножиться, чтобы eyeRay.d показывал в правильном направлении.Пока что использование матрицы просмотра или ее транспонированной или инвертированной версии не удалось.

Обновление :

Изменено u *= -c_pp.right на u *= c_pp.right и все работает путем умножения eyeRay.dс матрицей обратного просмотра.

Полный фиксированный код:

u *= c_pp.right;
v *= -c_pp.top;

Ray eyeRay;
eyeRay.o = make_float3(c_camPosition); //origin
eyeRay.d = make_float3(u, v, -c_pp.near)); //direction
eyeRay.d = mul(c_invViewMatrix, eyeRay.d);

с c_inViewMatrix матрицей обратного просмотра.

1 Ответ

3 голосов
/ 21 февраля 2012

На этот вопрос ответил оригинальный постер.Ответ должен изменить u *= -c_pp.right на u *= c_pp.right (изменение знака).Смотри выше.

Я добавил этот ответ, чтобы уменьшить количество оставшихся без ответа вопросов в теге CUDA, чтобы сделать его более полезным.

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