ここでは、実際の 3D シーンにレイキャスティングを追加しようとしています。ご存知のように、レイキャスティングでは、レイをキャストするために、レイの方向を取得する必要があります。光線の最初の点は、glLookAt から取得できる光線の開始点です。光線の 2 番目の点は、画面内の各点です。元の CUDA レイキャスティング SDK では、以下のコードによってカーネル関数でスクリーン ポイントを取得します。
uint x = blockIdx.x*blockDim.x + threadIdx.x;
uint y = blockIdx.y*blockDim.y + threadIdx.y;
(x,y) は画面空間の座標ですよね? そのため、(x, y) をワールド空間座標に変換する必要があります。親切な人が、gluUnProject を使ってこの仕事をすると言った。いい考え!ただし、CUDA カーネルで OpenGL 関数を呼び出すことはできません。
可逆行列を使用して翻訳を行うことができるかもしれません。しかし、正しい方法についてはわかりません。CUDA カーネル関数で画面座標をワールド座標に変換する方法についてヒントをくれる人はいますか?