使用OpenGL提供的矩阵在CUDA中进行Ray设置

时间:2011-07-14 20:12:02

标签: opengl cuda

我正在开发一个项目,用于移植我的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

uv是从-11的标准化屏幕坐标。 c_pp使用toprightnear来描述视锥体。 我现在正在寻找我必须乘以的适当矩阵 以便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 个答案:

答案 0 :(得分:3)

此问题已由原始海报内联回答。答案是将u *= -c_pp.right更改为u *= c_pp.right(符号更改)。往上看。

我添加了这个答案,以减少CUDA标签中未答复的问题的数量,以帮助提高它的实用性。