6

アルファ チャネルを使用していくつかのテクスチャを描画していますが、それらが表示されると、アルファ チャネルがバイナリのみのように見えます。したがって、テクスチャ ファイル自体ではピクセルは半透明ですが、ピクセルは透明または不透明です。ブレンドは次のように設定されます。

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

この問題の回避策はありますか?

上記は、それがどのようであるべきかを示しており、以下はそれがどのようであるかを示しています。

代替テキスト

4

4 に答える 4

3

これを試して:

gl.glEnable(GL10.GL_BLEND);    
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

gl.glEnable(GL10.GL_ALPHA_BITS);
//draw...
gl.glDisable(GL10.GL_ALPHA_BITS);
于 2010-09-20T12:46:18.607 に答える
1

アルファブレンディングの代わりにアルファテストを使用しているようです。これにより、しきい値処理の動作が説明されます。デフォルトでは有効になっていませんが、試してみる価値があるかもしれません:

gl.glDisable(GL10.GL_ALPHA_TEST);
于 2010-09-07T08:17:13.000 に答える
0

GLSurfaceViewに使用しているサーフェスフォーマットは何ですか?半透明(透明ではない)フォーマットですか?

surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);

また、EGL設定にはアルファサポートが設定されている必要があります。これはあなたに最高の品質を与えるでしょう...

surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);

編集:別の考えは、おそらく、glTexImage2Dを使用して画像を半透明の形式でOpenGLにアップロードしなかったということですか?

于 2010-09-08T09:07:18.167 に答える
0

PNGを、16ビットの5-5-5-1形式など、アルファが1ビットしかないGLテクスチャに保存していますか?これにより、上記の動作が発生します。

于 2010-09-12T11:04:53.373 に答える