OpenGL®ピッキングとは何ですか?
コンピュータープログラミングでのOpenGL®ピッキングは、シーンがレンダリングされた後、画面上の特定のポイントに3次元(3D)シーン内のどのオブジェクトが配置されているかを判断するプロセスです。 また、ポイントまたはボックス内に複数のオブジェクトを配置することもできます。 ほとんどの場合、OpenGL®ピッキングを使用して、ユーザーがマウスカーソルで選択しようとしている画面上の3Dオブジェクトを判断します。 この操作は単純に見えるかもしれませんが、OpenGL®がシーンをかなり複雑にするレンダリング方法にはいくつかの微妙な点があります。 さらに、特定のグラフィックカードおよびドライバーには、OpenGL®ピッキング機能が失敗し、誤った結果を返す可能性のある固有のグリッチがあります。
ユーザーがコンピューターモニターで3Dシーンを見ているとき、結果の画像はシーンのレンダリングとして知られています。 シーンは、実際にはプリミティブシェイプまたはポリゴンのコレクションとしてメモリに保存されます。これらは、シーンの空間内の3Dポイントの単なるコレクションです。 コンピューターは、絶対座標と呼ばれることもある世界座標を使用して、シーン内のオブジェクトを操作する最も基本的な機能を実行します。 ほとんどのアプリケーションでは、ユーザーはシーンのビューをさまざまな角度に操作して、オブジェクトをさまざまな視点で見ることができます。 シーン内のユーザーの仮想位置は、カメラアングルまたはカメラ位置と呼ばれます。
OpenGL®ピッキングの複雑さは、シーン内の任意の位置と角度、カメラ位置から2次元(2D)画面上のマウスの位置を決定することから生じます。 さらに、人間の視点からのレンダリングは実際には2Dであるため、ユーザーがシーン内でマウスクリックの深さを指定する方法はありません。 OpenGL®ピッキング機能は、この複雑な問題を2つの方法で解決します。
1つ目は、一連の個別の計算を実行して、ビューアが抽象的に表示されている場所を翻訳し、レンダリングウィンドウでオブジェクトを見つけるのではなく、レンダリングが使用されることを除いて、実際にシーンをレンダリングすることです選択は表示されず、オブジェクトの正しい位置を計算するためにのみ使用されます。 違いは、ユーザーに表示される領域全体をレンダリングする代わりに、マウスが配置されている領域のみをレンダリングすることです。 つまり、レンダリングされたオブジェクトは、技術的にはマウスポインターが置かれているポイントにあります。
2番目の問題、つまり選択された領域の深さを示す方法がないという問題は、シーン内のマウス座標の下にあるすべてのオブジェクトを返すことで解決されます。 OpenGL®ピッキング関数は、配列内のすべてのオブジェクトと、ビューアーの位置からの距離を返します。 これにより、プログラムは必要に応じて最も近いオブジェクトをすばやく見つけることができます。
OpenGL®のピッキングを視覚化する1つの方法は、3Dプログラミングではレイと呼ばれることもある線を想像することです。マウスポインターの位置からシーンに移動し、視聴者の位置から離れます。 この光線が触れる各オブジェクトは、オブジェクトの配列に追加され、ビューアーからどれだけ離れているかが示されます。 これは、OpenGL®ピッキングの1つの形式がどのように機能するかについての非常に簡単な説明です。
OpenGL®でオブジェクトを選択する別の方法は、色でオブジェクトを見つけることであり、かなり高速です。 このメソッドはシーンをレンダリングしますが、オブジェクトに照明とテクスチャを適用する代わりに、単一のシンプルな色でレンダリングされます。 各オブジェクトまたはオブジェクトのグループには、固有の色があります。 シーンはメモリ内でのみレンダリングされ、表示されないため、ユーザーの表示には影響しません。 オブジェクト間の3D衝突を探す代わりに、マウスカーソルの位置の色が代わりに返され、その色は特定のオブジェクトに関連付けられます。