2013-02-07 189 views
5

我一直在嘗試在Libgdx項目中做一些模版。到目前爲止,我只能模板化多邊形(代碼,在圖之後)。OpenGL ES 2.0中的模版紋理

問題:我該如何在OpenGL ES 2.0中模板化非多邊形形狀? (即我不希望透明像素被繪製到模板緩衝區)

我該如何在不使用GL_ALPHA_TEST(因爲OpenGL ES 2.0不允許它)的情況下實現這個功能?

任何幫助或指針非常感謝,並提前感謝。

編輯:這將是非常有幫助的,如果你可以提供我一點的代碼樣本理解。

請考慮如下圖所示:

enter image description here

這是渲染代碼:

@Override 
public void render(float delta) { 
    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_STENCIL_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 


    stage.act(); 
    stage.draw(); 

    Gdx.gl20.glColorMask(false, false, false, true); 
    Gdx.gl20.glDepthMask(false); 

    Gdx.gl20.glClearStencil(0x0); 

    Gdx.gl20.glEnable(GL20.GL_STENCIL_TEST); 

    Gdx.gl20.glStencilFunc(GL20.GL_ALWAYS, 0x1, 0x1); 
    Gdx.gl20.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_REPLACE);  

    batch.begin(); 
    batch.draw(heart, 0, i+50); 
    batch.end(); 

    Gdx.gl20.glColorMask(true, true, true, true); 
    Gdx.gl20.glDepthMask(true); 

    Gdx.gl20.glStencilFunc(GL20.GL_NOTEQUAL, 0x1, 0x1); 
    Gdx.gl20.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_KEEP); 

    batch.begin(); 
    batch.draw(heart, 0, i); 
    batch.end(); 

    Gdx.gl20.glDisable(GL20.GL_STENCIL_TEST); 
} 

回答

0

我沒有與libgdx經驗,但是在通常情況下,你可以模仿alpha測試在片段着色器:

if (pixelColor.a <= ALPHA_THRESHOLD) // threshold should be 0 for good visual results 
     discard; 
+0

我想知道如何在李bgdx ?? – Rafay