2016-07-26 2 views
0

オーバーラップ私はOpenGLとステンシルバッファを使用することについて疑問を持っており、一例として、私は重複して円を描く必要があるLibgdxステンシルバッファは

libgdx。

renderメソッドのコードはここにある:

Gdx.gl.glClearColor(1f, 1f, 1f, 1f); 
    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_STENCIL_BUFFER_BIT); 
    shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); 

    Gdx.gl.glEnable(GL20.GL_STENCIL_TEST); 
    Gdx.gl.glClearStencil(0); 
    Gdx.gl.glClear(GL20.GL_STENCIL_BUFFER_BIT); 
    Gdx.gl.glStencilFunc(GL20.GL_ALWAYS, 1, 0); 
    Gdx.gl.glStencilOp(GL20.GL_KEEP, GL20.GL_INCR, GL20.GL_INCR); 

    shapeRenderer.setColor(new Color(1f, 0f, 0f, 1f)); // red 
    shapeRenderer.circle(200, 200, 100); 
    shapeRenderer.circle(180, 180, 100); 

    Gdx.gl.glStencilFunc(GL20.GL_EQUAL, 2, 0xFF); 
    Gdx.gl.glStencilOp(GL20.GL_REPLACE, GL20.GL_REPLACE, GL20.GL_REPLACE); 
    shapeRenderer.setColor(new Color(0f, 1f, 0f, 1f)); // green 
    shapeRenderer.circle(200, 200, 100); 
    shapeRenderer.circle(180, 180, 100); 

    Gdx.gl.glDisable(GL20.GL_STENCIL_TEST); 
    shapeRenderer.end(); 

結果は次のとおりです。

このような何か期待

result

expected

オーバーラップは他の色にする必要があります。 ここに問題がありますか?

+0

すべての引数に 'Gdx.gl.glStencilOp(GL20.GL_REPLACE、GL20.GL_REPLACE、GL20.GL_REPLACE);と' GL_KEEP'を置き換えて何かが変わるのですか? – pleluron

+0

ありがとうございます。私は試みましたが、何も変わりませんでした。 –

答えて

0

ロジックは正常に見えるので、レンダリング対象のフレームバッファに実際にステンシルの添付がないことが問題であると思われます。ステンシルバッファがない場合、OpenGL ESはステンシルテストが無効になっているかのように動作します。最後の2つの円は常に最初の2つを上書きします。

コンテキスト作成(ウィンドウサーフェスの場合)またはオフスクリーンレンダーターゲットのFBO作成を確認します。

+0

ありがとう、それをチェックします。 –

関連する問題