PBO (OpenGL を使用したピクセル バッファー オブジェクト) を使用してカラー ピッキング システムを実装しようとしていましたが、終了すると、マップ時に PBO から出力された数値がまったく意味をなさないことに気付きました。アプリケーションでさまざまな色の大きな正方形をレンダリングすると、結果のDIDがこれらのさまざまな色の間で変化しましたが、数値を分析した後でも、意味がわかりません。
たとえば、純粋な赤をクリックすると (-1,0,0) のバイトが返され、純粋な青では (0,0,-1) が返されましたが、すべてのロジックに対して、純粋な緑では (-1,0,-1) が返されました。 、シアンも (-1,0,0) を与え、黄色は (76,-1,0) を与えます。
2 つの異なる色が同じバイト構成になる可能性があることを考えると、これらの数値は明らかに間違っています。完全に赤い色は (127,0,0) であるべきではありませんか?
1 ピクセルしか読み取っていないため、サイズ 3 の初期化に使用したコードを次に示します。
pboid = glGenBuffersARB(); //Initialize buffer for pbo
glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, pboid); //bind buffer
glBufferDataARB(GL_PIXEL_PACK_BUFFER_EXT, 3,GL_DYNAMIC_READ); //create a pbo with 3 slots
glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, 0); //unbind buffer
そして、これがピクセルの読み取りに使用したコードです
glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, pboid); //Bind the pbo
glReadPixels((int)lastMousePosition.x,(int)lastMousePosition.y,1,1, GL_RGB, GL_UNSIGNED_BYTE, 0); //Read 1 pixel
ByteBuffer colorBuffer = glMapBufferARB(GL_PIXEL_PACK_BUFFER_EXT, GL_READ_ONLY_ARB); //Map the buffer so we can read it
for(int x = 0; x < colorBuffer.limit(); x++)
{
System.out.println("color byte: " + colorBuffer.get(x)); //Print out the color byte
}
glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_EXT); //Unmap the buffer so it can be used again
glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, 0); //Unbind the pbo
私が行った仮定が間違っている場合は、修正してください。おそらく、このシステムを使用して、各要素を一意の色で fbo にレンダリングし、クリックされたピクセルの色をテストすることで、どの gui 要素がクリックされているかを知ることを計画しています。助けていただける方、よろしくお願いします!