2015-11-10 241 views
7

我想矇蔽小於蒙版的背景圖像。並且背景和蒙版之間的空間顯示爲黑色。含有alpha的蒙版圖像會使內蒙版黑色

mask and background

enter image description here

這是我使用的代碼:

 batch.end(); 
    batch.begin();  
    Gdx.gl20.glColorMask(false, false, false, true); 
    batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ZERO); 
    batch.draw(mask, getX(), getY()); 
    batch.flush(); 
    Gdx.gl20.glColorMask(true, true, true, true);  
    batch.setBlendFunction(GL20.GL_DST_ALPHA, GL20.GL_ONE_MINUS_DST_ALPHA);   
    batch.draw(texture, getX(), getY());  
    batch.flush(); 
    batch.setBlendFunction(GL20.GL_SRC_ALPHA,GL20.GL_ONE_MINUS_SRC_ALPHA); 
    batch.end(); 
    batch.begin(); 

我嘗試了所有類型的功能組合,沒有任何成功。可能我錯過了一些東西。

更新

附加我建立src和DST混合功能的所有可能的(相關)的結果圖。幸運的是,以下都沒有發揮作用,正如我猜測的那樣,爲了達到結果還需要做更多的事情。

 Gdx.gl20.glColorMask(true, true, true, true);  
    batch.setBlendFunction(src_func, dst_func);   
    batch.draw(texture, getX(), getY());  

enter image description here

+1

這是一個非常詳細和內容豐富的問題​​。 – Programmer

回答

3

使用FrameBuffer解決它。

batch.end(); 
    spriteBatch.begin(); 
     buffer.begin(); 
      Gdx.gl20.glColorMask(false, false, false, true); 
      spriteBatch.setBlendFunction(GL20.GL_ONE, GL20.GL_ZERO); 
      spriteBatch.draw(mask, 0,0); 
      Gdx.gl20.glColorMask(true, true, true, true); 
      spriteBatch.setBlendFunction(GL20.GL_DST_ALPHA, GL20.GL_ZERO); 
      spriteBatch.draw(texture, 0,0); 
      spriteBatch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); 
     buffer.end(); 
    spriteBatch.end();  
    batch.begin(); 
    batch.draw(buffer.getColorBufferTexture(), getX(), getY()); 
0

只是考慮看看您的圖像,它看起來像:

  • 面具的阿爾法是在輸出阿爾法完全控制
  • 你想要的字母的背景圖片也要加以考慮

In換句話說,你只想要兩個圖像都有alpha的alpha。


我還沒有能夠尋找到更多的混合功能,以及它們是如何工作的,並可以就如何實現自己的目標,因爲我看着辦吧,但進一步的細節更新,也許知道你是什麼正在努力完成將幫助你在找到它之前弄清楚它。

How to do blending in LibGDX - 這個問題看起來很有趣,將網格中的源圖像和目標圖像組合起來以顯示效果。

+0

嗨,謝謝你的回答。我知道我在做什麼,我不知道該怎麼做。我想我嘗試了所有可能的混合功能。所以我想有些事情需要完成。在你發佈的鏈接中,即使它被回答了,這也是一種不同的情況。如你所述。 – Rami