マウスクリックをレイに変換するにはどうすればよいですか?
透視図法があります。ユーザーが画面をクリックすると、マウスポイントから投影される近距離面と遠距離面の間の光線を計算したいので、自分の世界で光線交差コードを実行できます。 私は自分のマトリックスとベクターとレイのクラスを使用していますが、それらはすべて期待どおりに機能します。 ただし、レイをワールド座標に変換しようとすると、遠方は常に0,0,0になるため、レイはマウスクリックからオブジェクト空間の中心ではなく、オブジェクト空間の中心に移動します。(nearとfarのx座標とy座標は同一であり、互いに負であるz座標のみが異なります) GLint vp[4]; glGetIntegerv(GL_VIEWPORT,vp); matrix_t mv, p; glGetFloatv(GL_MODELVIEW_MATRIX,mv.f); glGetFloatv(GL_PROJECTION_MATRIX,p.f); const matrix_t inv = (mv*p).inverse(); const float unit_x = (2.0f*((float)(x-vp[0])/(vp[2]-vp[0])))-1.0f, unit_y = 1.0f-(2.0f*((float)(y-vp[1])/(vp[3]-vp[1]))); const vec_t near(vec_t(unit_x,unit_y,-1)*inv); const vec_t far(vec_t(unit_x,unit_y,1)*inv); ray = ray_t(near,far-near); 何が間違っていますか?(マウスポイントをどのように投影解除しますか?)