7

OpenGL コンテキストでは、マウス座標を 3D ワールド座標に変換できることを確認しました (たとえば、Opengl を使用した MFC は、マウスの 2D 座標から 3D 座標を取得します)。ただし、単に s のセットと空のスペースがたくさんある場合、これは機能しませんGLPoint。空のスペースにマウスを置いている場合、3D 座標は意味を持ちません。

マウスの位置に最も近い 3D ポイントの座標を取得するにはどうすればよいですか?

4

1 に答える 1

3

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 など)。

于 2015-09-18T18:21:42.690 に答える