在这里,我试图将光线投射添加到真实的3D场景中。我们知道,在光线投射中,为了投射光线,我们需要得到光线的方向。射线中的第一点是我可以从glLookAt得到的射线的起点。射线中的第二点是屏幕上的每个点。在原来的CUDA光线投射SDK,它通过下面的代码获取内核功能的屏幕点:在CUDA中,如何将屏幕空间坐标转换为内核函数中的世界空间坐标
uint x = blockIdx.x*blockDim.x + threadIdx.x;
uint y = blockIdx.y*blockDim.y + threadIdx.y;
(X,Y)的屏幕空间坐标吧?所以现在我需要将(x,y)翻译成世界空间坐标。一个不错的人告诉我使用gluUnProject来完成这项工作。好想法!但是我不能在CUDA内核中调用OpenGL函数。
也许我可以使用可逆矩阵做翻译。但我不确定正确的方法。有没有人可以给我一个关于如何在CUDA内核函数中将屏幕坐标转换为世界坐标的提示?
这并不是所有你想要的帮助。它是转换的数学,还是数学的CUDA实现还是什么?也许你可以先写一连串执行转换的主机代码并确认它是正确的,然后看看如何将计算映射到CUDA执行模型的问题。 – talonmies
您可以查看'gluUnproject()'的源代码并在CUDA代码中实现它。这个问题与CUDA完全正交 - 你需要的仅仅是数学,然后是C代码,它们将由每个线程执行。 – harrism