2015-11-10 9 views
7

Sto tentando di mascherare un'immagine di sfondo più piccola della maschera. e lo spazio tra lo sfondo e la maschera appare nero.L'immagine di mascheramento che contiene alfa rende la maschera interna nera

mask and background

enter image description here

Questo è il codice che sto utilizzando:

 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(); 

ho cercato combinazioni congressi per ogni tipo, senza alcun successo. probabilmente mi manca qualcosa.

Aggiornamento

Collegamento grafico che costruisco di tutte le possibili (rilevanti) risultati della funzione src e miscelazione dst. Fortunatamente nessuno dei seguenti sta funzionando, e come ho immaginato ci sia qualcosa di più da fare per raggiungere il risultato.

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

enter image description here

+1

Questa è una domanda molto dettagliata e informativa. – Programmer

risposta

3

Risolto utilizzando 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

Basta dare un'occhiata a vostre immagini, sembra che:

  • L'alfa del maschera è in completo controllo della alfa uscita
  • Volete l'alfa dell'immagine di sfondo da prendere in considerazione

In altre parole, vuoi solo alfa dove entrambe le immagini hanno alfa.


non ho ancora avuto modo di esaminare più delle funzioni di miscelazione e come funzionano, e può aggiornare con ulteriori dettagli su come raggiungere i tuoi obiettivi, come ho capirlo, ma forse sapendo quello che stanno cercando di realizzare ti aiuterà a capirlo prima di arrivarci.

How to do blending in LibGDX - questa domanda sembra interessante, combinando le immagini di origine e di destinazione in una griglia per mostrare gli effetti.

+0

Ciao, grazie per la tua risposta. So cosa sto cercando di realizzare non so come farlo. Penso di aver provato tutte le possibili funzioni di fusione. quindi immagino ci sia qualcosa di più di quello che deve essere fatto. nel link che hai postato anche a cui è stata data risposta è uno scenario diverso. come specificato – Rami

Problemi correlati