2013-02-07 41 views
5

Tôi đã cố gắng thực hiện một số phần trong dự án Libgdx. Cho đến nay, tôi chỉ có thể tô ra các đa giác (Mã sau hình minh họa).Kết cấu in trong OpenGL ES 2.0

CÂU HỎI: Làm cách nào để in ra các hình dạng không đa giác trong OpenGL ES 2.0? (tức là tôi không muốn các pixel trong suốt được vẽ vào bộ đệm stencil)

Làm cách nào để đạt được điều này mà không sử dụng GL_ALPHA_TEST (Vì OpenGL ES 2.0 không cho phép nó)?

Bất kỳ trợ giúp hoặc con trỏ nào được đánh giá cao và cảm ơn trước.

EDIT: Sẽ rất hữu ích nếu bạn có thể cung cấp cho tôi một chút mẫu mã để hiểu.

Vui lòng xem xét hình minh họa dưới đây:

enter image description here

Đây là mã rendering:

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

Trả lời

0

Tôi không có kinh nghiệm với libgdx, nhưng trong trường hợp thông thường, bạn có thể bắt chước thử nghiệm alpha trong trình đổ nát phân đoạn:

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

Tôi tự hỏi làm thế nào để làm điều đó trong Li bgdx ?? – Rafay

Các vấn đề liên quan