在这里,我尝试将光线投射添加到真实的 3D 场景中。众所周知,在光线投射中,为了投射光线,我们需要获取光线的方向。射线中的第一个点是射线的起点,我可以从 glLookAt 获得。射线中的第二个点是屏幕中的每个点。在原始的CUDA ray-casting SDK中,它通过以下代码在Kernel Function中获取屏幕点:
uint x = blockIdx.x*blockDim.x + threadIdx.x;
uint y = blockIdx.y*blockDim.y + threadIdx.y;
(x,y) 是屏幕空间坐标吗?所以现在我需要将 (x, y) 翻译成世界空间坐标。一个好人告诉我使用 gluUnProject 来完成这项工作。好想法!但是我不能在 CUDA 内核中调用 OpenGL 函数。
也许我可以使用可逆矩阵进行翻译。但我不确定正确的方法。有没有人可以给我一个关于如何在 CUDA 内核函数中将屏幕坐标转换为世界坐标的提示?