0

さて、私は 2D オープンソース ゲーム クライアントを改造しており、ゲーム オブジェクトのテクスチャに透明性を追加しようとしていました。すでにアルファチャンネルを読み込んでロードしています。テクスチャは、形式と内部形式が RGBA の openGL に既に読み込まれています。

問題は、ピクセルのアルファ チャネルが 255 (または 1) 未満の場合、画面に表示されないことです。アルファチャンネルを無視せず、RGBのみを表示し、ピクセルを非表示にします。このクライアントは、描画に OpenGL とシェーダーを使用します。

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )glDisable(GL_DEPTH_TEST)およびを呼び出して、既にブレンディングを有効にしていますglColorMask(1,1,1,1)

4

1 に答える 1

2
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )

この行は、ソース ピクセルとデスティネーション ピクセルをブレンドする方法を Open GL に指示します。

glDisable(GL_DEPTH_TEST)

これは、2D レンダリングには必要ない Z-DEPTH テストを無効にするため、間違っている可能性があると思います。

glColorMask(1,1,1,1)

私はこれについて 100% ではありませんが、これにより、指定された RGBA に一致するピクセルが隠されていると思われます。この場合、R=255、G=255、B=255、A=255 のピクセルはレンダリングされません。

使用してみてください:

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

renderEverything();

glDisable(GL_BLEND);

あなたがそれを機能させることを願っています:)

于 2012-12-28T19:58:18.110 に答える