のAndroidのOpenGL ES 1.1(HTCの欲望)を使用して...私は、一般的に持っているのAndroidのOpenGL ES 1.1:ステンシルバッファから読み出さ
問題はこれです:
私は複雑でレンダリングされた様々な3Dオブジェクトを持っていますシーン。ユーザーが特定のオブジェクトをクリックしたかどうかを確認したいこのオブジェクトは部分的に隠されている可能性があり、そのためシーン内のほぼすべての図形として表示されることがあります。私は、ユーザーがシーン内で見えるオブジェクトの一部をクリックすると、オブジェクトが「選択」されるようにしたいだけです。これは、オブジェクトの隠れた領域を簡単に考慮できないため、オブジェクトの交差に対してベクトルベースの計算を使用できないことを意味します。
だから、私は、オブジェクトが表示されていた場所にステンシルバッファが1秒で満たされていたようなステンシルバッファを設定し、他の場所のステンシルバッファにすると0です...アイデアを
を思いつきましたユーザはシーン内の特定のピクセルをクリックします。オブジェクトがクリックされたかどうかを示す1または0が含まれているかどうかを確認するためにステンシルバッファをチェックするだけです。
これはPC上では完全に機能しますが、Android OpenGL ES 1.1ではGL_STENCIL_INDEXがサポートされていないため、glReadPixels()を使用してステンシルバッファから読み込むことができないようです。
この0/1をステンシルバッファから読み取る方法があるかどうかは知っていますか?または、誰かが私のオブジェクトがクリックされたかどうかを判断するためのより良いアルゴリズムを考えることができますか?
多くのありがとう
レンダバッファ添付ファイルのテクスチャに8ビットカラー値の既定のサポートがないため(glReadPixel値はそれに応じて拡大縮小する必要があります)、上記の方法では少しの精巧さが必要です。他の落とし穴には、glEnabledディザリングと(しかし、これは野生のhypoteysです)、おそらくハードウェアベンダーからいくつかの実装が奇抜です(例えば、いくつかのビデオハードウェアはラスタライズ時にあまり正確ではないかもしれません)。もう少し遅いですが、他の人が私のようにこの答えを調べるかもしれません。 – Rick77