OpenGL コンテキストでは、マウス座標を 3D ワールド座標に変換できることを確認しました (たとえば、Opengl を使用した MFC は、マウスの 2D 座標から 3D 座標を取得します)。ただし、単に s のセットと空のスペースがたくさんある場合、これは機能しませんGLPoint
。空のスペースにマウスを置いている場合、3D 座標は意味を持ちません。
マウスの位置に最も近い 3D ポイントの座標を取得するにはどうすればよいですか?
OpenGL コンテキストでは、マウス座標を 3D ワールド座標に変換できることを確認しました (たとえば、Opengl を使用した MFC は、マウスの 2D 座標から 3D 座標を取得します)。ただし、単に s のセットと空のスペースがたくさんある場合、これは機能しませんGLPoint
。空のスペースにマウスを置いている場合、3D 座標は意味を持ちません。
マウスの位置に最も近い 3D ポイントの座標を取得するにはどうすればよいですか?
2D マウス座標を 3D ワールドに「投影解除」するには、追加情報が必要であることを認識してください。画面上の 2D 位置は、3D のニア プレーンからファー プレーンまでの線に沿った無数の点に対応します。これが意味することは、3D ポイントを取得するには、深度値も提供する必要があるということです。
関数はこれgluUnProject
を行う便利な方法であり、 this のパラメーターを提供しますwinZ
。0.0 はニア プレーンの 3D ポイントを検出し、1.0 はファー プレーンの 3D ポイントを検出します。
gluUnProject(winX, winY, winZ, model, proj, view, objX, objY, objZ);
注:が利用できない場合gluUnProject
は、行列を使用して同じことを非常に簡単に把握できます。ソースはこちら
マウスを使用して 3D オブジェクトを操作する場合、この深度値は通常、深度バッファーからサンプリングするか、レイをシーン ジオメトリまたはプリミティブ (球体やボックスなど) と交差させることによって検出されます。ポイントを操作することが目的の場合は、各ポイントの周りに球を使用できます。「そこのどこか」に 3D ポイントが必要な場合は、深さの値を決めることができます (近平面では 0.0、近平面と遠平面の中間で 0.5 など)。