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