OpenGL を使用して 2D ゲームを作成しています。最近、Framebuffer オブジェクトを実装しようとしましたが、ブレンドに関していくつか問題があります。
FBO を作成しています (GL_RGBA をフォーマットとして使用)。FBO にレンダリングするときは、まず完全に透明な黒にクリアし、GL_BLEND を無効にします。次にテクスチャを描画し、GL_BLEND を再度有効にします。FBO テクスチャを描画するときは、GL_SRC_ALPHA と GL_ONE_MINUS_SRC_ALPHA をそれぞれソース ピクセルとデスティネーション ピクセルとして、ブレンディング関数として使用します。テクスチャ付きのクワッドとしてレンダリングしています。白いピクセルが透明に見えるため、これは正しく機能しません。さまざまなブレンド関数値を試してみましたが、試したすべてに問題がありました。ブレンディングがどのように機能するかを完全には理解していないので、これに頭を悩ませるのは難しい. 多分私はここで明らかな何かを見逃していますか?
これが現在の様子の画像です。ボタンが強調表示されると、ボタンの周りが光るはずですが、代わりにその周りのピクセルが透明に見えます: http://i.snag.gy/RnV4s.jpg
画像には 2 つのボックスのテキストも表示されています。上の 1 つは、FBO なしで通常どおりに描画されます。テクスチャも FBO なしで正常にレンダリングされるため、フレームバッファ コードのどこかに問題があることがわかります。
「RenderTarget」クラスをペーストビンに貼り付けました (FBO ではなくレンダーターゲットと呼ぶことに慣れています): http://pastebin.com/dBXgjrUX
これは私がそれを使用する方法です:
RT->Begin();
// draw stuff
RT->End();
RT->Draw();
誰かが私を助けることができますか?私の問題についてさらに情報が必要な場合はお知らせください。
編集:起動時に設定したOpenGLのプロパティは次のとおりです。
// Initialize shaders
shaderManager.InitializeStockShaders();
// Set some OpenGL properties
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glShadeModel(GL_SMOOTH);
glAlphaFunc(GL_GREATER, 0.0f);
// Enables/disables
glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDisable(GL_DITHER);
glDisable(GL_LIGHTING);