1つの手法は、id-bufferを使用することです。フレームバッファを使用して、シーンを一度に2つのテクスチャに描画します。最初のテクスチャは、典型的なカラーテクスチャになります。2つ目は、整数を格納するテクスチャになります。シーンを描画する前に、各立方体の面に番号を割り当てます。これらの数値をシェーダーに渡します(これには均一変数が機能します)。フラグメントシェーダーは、これらの数値を整数テクスチャに「描画」すると同時に、カラーテクスチャに通常のシェーディングを実行します。マウスカーソルにあるものを見つける必要がある場合は、を使用しますglReadPixels()
。
これはすべて、最新のOpenGL(3以上)を使用していることを前提としています。固定機能パイプライン(ラメ)で立ち往生している場合は、各立方体の面に一意の色を割り当てて、無地の色でバックバッファーに描画することもできます。テクスチャリングなどを必ずオフにしてください。それが終わったら、を使用glReadPixels()
してマウスカーソルに描かれたものを見つけます。次に、通常どおりに描画し、バッファを交換します。(これが私が話していることを示すいくつかの古いコードです:http ://www.lighthouse3d.com/opengl/picking/index.php3?color1 )
もう1つの手法は、画面に「光線を当てる」ことです。基本的に、ジオメトリ内の各形状に対していくつかの方程式をテストします。これらのテストに合格すると、交差があり、クリックされた形状がわかります。私はこの方法にあまり慣れていないので、他の人に説明を任せます。