2010-12-02 19 views
1

私は、y = -50平面上にクワッドを持っています。現時点では、私がしたいのは、クワッドのマウスクリックの座標を取得することだけです。私はこれを限られた範囲で行うことができました。問題は、クワッドを描画するときに適用した変換が考慮されていないことです。私はいくつかの定数を追加して動作させることができますが、glRotatef()を使ってx軸とy軸についてシーンを回転させて、回転が起こると直ちに座標が乱されるようにします。gluUnProject()でレイピッキング

ここで私が今やっているものです:二回、一回= 0 zの)私はgluUnProject(呼び出し

、一度Z = 1

gluUnProject(mouseX, WINDOW_HEIGHT - mouseY, 0, modelView, projection, viewport, &x1, &y1, &z1); 
gluUnProject(mouseX, WINDOW_HEIGHT - mouseY, 1, modelView, projection, viewport, &x2, &y2, &z2); 

正規化された光線ベクトルを持つ:

x = x2 - x1; 
y = y2 - y1; 
z = z2 - z1; 
mag = sqrt(x*x + y*y + z*z); 
x /= mag; 
y /= mag; 
z /= mag; 

パラメトリック方程式:

float t = -(camY)/y; 
planeX = camX + t*x; 
planeY = camY + t*y; 
planeZ = camZ + t*z; 

ここで、(camX、camY、camZ)はgluLookAt()に渡されるカメラ位置です。

planeX、planeY、およびplaneZを、クワッドを描画するために使用したのと同じ座標系で、クワッドのクリックの座標にします。どうすればこれを達成できますか?

+0

modelViewマトリックスはいつ取得しますか? 'glRotatef()'の前または後ろに? – genpfault

答えて

1

あなたが選択した明示的なz深度で渡すはずがありません。世界の座標を見つけるには、その特定のマウス座標で深度バッファの値を渡す必要があります。

GLfloat depth; 
glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth); 

これをgluUnProjectに渡すと、探している値が得られます。さらに、genpfaultがコメントで述べたように、適切な瞬間にモデルビューのマトリックスデータを取得していることを確認してください。それ以外の場合は、間違った行列があります。

関連する問題