なんだか同じようなことをやってそうですね。
他スレにも書き込んだのですが、こうやって何とかできました。
POINT3D ray;
POINT3D scr; // x y zをdouble型で確保している構造体

for(posX=0;posX<WIDTH;posX++)
for(posY=0;posY<HEIGHT;posY++) //nearクリップ面を端っこから走査していく
/* get near clip position 床○先生のところを参考に */
glGetDoublev(GL_MODELVIEW_MATRIX, model);
glGetDoublev(GL_PROJECTION_MATRIX, proj);
glGetIntegerv(GL_VIEWPORT, view);
glReadPixels(posX, posY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &scr.z);
gluUnProject(posX, posY, 0, model, proj, view, &scr.x, &scr.y, &scr.z); //nearクリップ面の座標をワールド座標で取得
/* end get near clip position */
// 視点とnearクリップ面上の点から Ray の算出  
SubVector3D(scr,eye,&ray);
// Ray を単位ベクトルに変換
UnitVector3D(&ray);

Rayのところで使っているベクトル関数はこちらのを、ほぼそのまま入れてます。
ttp://www.cam.hi-ho.ne.jp/strong_warriors/teacher/chapter01.html

nearクリップ面の座標は、賢いやり方が他にあると思うのですが…
これで画面の点と、視点とを結ぶ直線を順番に打っていけます

わかりにくいと思いますので、分からないところは言ってください。
交差判定について教えていただけると嬉しいです。