2013-02-07 12 views
5

Próbowałem zrobić kilka szablonów w projekcie Libgdx. Do tej pory mogłem wymodelować wielokąty (Code po ilustracji).Strukturyzowanie tekstur w OpenGL ES 2.0

PYTANIE: Jak mam wykreślać niepoligonalne kształty w OpenGL ES 2.0? (tzn. nie chcę, aby przezroczyste piksele były rysowane do bufora szablonu)

Jak mam to osiągnąć bez użycia GL_ALPHA_TEST (ponieważ OpenGL ES 2.0 na to nie zezwala)?

Każda pomoc lub wskazówki są bardzo doceniane i z góry dziękujemy.

EDYCJA: Byłoby bardzo pomocne, gdybyś mógł podać mi trochę próbki kodu do zrozumienia.

Proszę zwrócić uwagę na ilustracji poniżej:

enter image description here

Jest to kod renderowania:

@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); 
} 

Odpowiedz

0

nie mam doświadczenia z libgdx, ale w powszechnym przypadku można naśladować testu alfa w module cieniującym:

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

Zastanawiam się, jak to zrobić w Li bgdx ?? – Rafay