これは、私の以前の問題と投稿の続きです。そこで受け取った回答のおかげで、OpenGL の学習を進めるだけでなく、目標に少し近づくことができたと感じていますが、ステンシル バッファーの操作の基本を理解した直後に、問題が発生しました。 .
ステンシル バッファにスプライトを描画すると、無意識に望んでいたように完全に透明ではないピクセルだけではなく、正方形の領域全体が描画されるようです。なぜそうなるのかはなんとなくわかりますが、解決策がどこにあるのかわかりません。ステンシル自体をかなり試し、スプライトバッチが低アルファ フラグメントを破棄するために使用するシェーダーを変更しましたが、全体像を把握できていないようです。
問題の視覚的な例として、前の質問で使用した例を続けます。現在、2つの円を互いに重ねて描画しようとしています(したがって、それらは完全にブレンドされ、重なり合うことはありません)、私はこれを取得しています:
したがって、基本的に、複雑な形状で LibGDX の Sprite および SpriteBatch 機能を使用してステンシル バッファーを利用する方法はありますか (円は例としてのみ使用されています)、または代替ルートを探す必要がありますか?
編集 ::
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);
Gdx.gl.glDepthMask(true);
batch.begin();
sprite.draw(batch);
sprite2.draw(batch);
batch.end();
Gdx.gl.glDisable(GL20.GL_DEPTH_TEST);