2012-01-11 10 views
0

glut関数glutMouseFunc()を使用してマウスの3D座標をC++/OpengGLで取得しようとしています。glut関数glutMouseFunc()を使ってウィンドウ座標を3Dワールド座標に変換する

void mouse(int button, int state, int x, int y){ 
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) 
{ 
    mouse_x=x; 
    mouse_y=y; 
    } 
} 

機能は、マウスのクリックのウィンドウ座標を取得し、私は過剰機能glutMouseFunc(とそれを使用して)このような:

glutMouseFunc(mouse); 

私の質問だから私はこのような関数を作成しましたどのように私は3次元世界でそれらを使用することができるマウスの関数によって与えられた座標を変更するだろうか。私の正確な目的は次のようなものです:世界の3D形状をクリックしたかどうかを確認すること。

[編集] 3Dオブジェクトの座標を2Dウィンドウの座標に変換し、それをマウスクリックの座標と比較する方が簡単でしょうか?

+0

同じ質問(原則として)http://stackoverflow.com/q/2093096/524368 – datenwolf

答えて

0

マウスクリックは3d空間内の点には対応していませんが、レイには対応していません。

いずれにしても、gluUnProjectを使用します。

カーソルの下のシーン「深さ」を知っている場合は、winZパラメータで深さを渡すことで、クリックの3次元位置を取得できます。

深さが分からない場合は、winZパラメータで0.0を渡して光線の開始点を取得し、1.0を使用して「終了点」を取得します。この光線が何かに当たった場合は、自分で計算する必要があります。

関連する問題