ビリヤードシミュレーションを作成しようとしていますが、glReadPixelsとgluUnProjectを使用して、マウスポインターをシーンに投影しています。
これは、マウスがシーン内のオブジェクト(たとえばテーブル)を指している場合は正常に機能しますが、マウスが背景を指している場合、glReadPixels呼び出しが1.0を返すため、gluUnProjectを台無しにします。
テーブルの同じレベルに透明な平面を描画する方法を理解しようとしています。これにより、シーンのどこにマウスを向けても、テーブルと同じ平面を指しているかのように奥行きが得られます。 。
glAlphaFunc(GL_GREATER、0.01f);なしで透明なクワッドを描画した場合。クワッドを白で描画し、深度テストは計画どおりに機能しますが、alphaFuncの呼び出しを追加してクワッドを透明にすると、深度は以前の状態に戻ります。私が見たところ、glReadPixelsはフレームバッファからピクセルを読み取るので、これは理にかなっています。どうすればこれを回避できるのか疑問に思っています。
また、クワッドの巻線を逆にして上から見えないようにしましたが、これには、フレームバッファから測定値を取得するglReadPixelsと同じ問題があります。
つまり、オブジェクトを画面に描画せずに、glReadPixelsを取得してオブジェクトから深度コンポーネントを取得するにはどうすればよいですか?
glReadPixelsとgluUnProjectの呼び出しは次のとおりです。
winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels(x, (int) winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);