여기 실제의 3D 장면에 레이 - 캐스팅을 추가하려고합니다. 우리가 알고있는 것처럼 레이 캐스팅에서는 레이를 캐스팅하기 위해 레이의 방향을 알아야합니다. 광선의 첫 번째 점은 glLookAt에서 얻을 수있는 광선의 시작점입니다. 광선의 두 번째 점은 화면의 각 점입니다. 화면 공간을 잘 조정되어CUDA에서 커널 함수에서 화면 공간 좌표를 세계 공간 좌표로 변환하는 방법
uint x = blockIdx.x*blockDim.x + threadIdx.x;
uint y = blockIdx.y*blockDim.y + threadIdx.y;
(X, Y) : 원래 CUDA 레이 캐스팅 SDK에서, 아래의 코드에 의해 커널 기능의 화면 포인트를 얻는다? 이제 (x, y)를 세계 공간 좌표로 변환해야합니다. 좋은 사람은 gluUnProject를 사용하여이 작업을 수행한다고 말했습니다. 좋은 생각! 그러나 CUDA 커널에서 OpenGL 함수를 호출 할 수 없습니다.
어쩌면 역변환 행렬을 사용하여 변환 할 수 있습니다. 그러나 올바른 방법이 확실하지 않습니다. 누가 CUDA 커널 함수에서 화면 좌표를 세계 좌표로 변환하는 방법에 대한 힌트를 줄 수 있습니까?
도움이 필요한 부분이 그다지 명백하지 않습니다. 그것은 변환의 수학입니까, 아니면 수학의 CUDA 구현입니까? 아마도 변환을 수행하는 호스트 코드의 직렬 부분을 작성하여 올바른지 확인한 다음 계산을 CUDA 실행 모델로 매핑하는 방법의 문제점을 살펴볼 수 있습니다. – talonmies
'gluUnproject()'의 소스를보고 CUDA 코드로 구현할 수 있습니다. 이 질문은 CUDA와 완전히 직교합니다 - 당신이 필요로하는 것은 단지 수학이며 각 스레드에 의해 실행될 C 코드입니다. – harrism