2015-11-10 9 views
7

Ich versuche, ein Hintergrundbild zu maskieren, das kleiner als die Maske ist. und der Abstand zwischen dem Hintergrund und der Maske erscheint schwarz.Maskierung Bild, das Alpha enthält, macht die innere Maske schwarz

mask and background

enter image description here

Dies ist der Code ich benutze:

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

Ich habe versucht, alle Art Funktionskombinationen ohne Erfolg. Vermutlich vermisse ich etwas.

aktualisieren

Anbringen Diagramm, das ich von allen möglichen (relevanten) Ergebnisse von src und dst Blending-Funktion aufzubauen. Glücklicherweise funktioniert keiner der unten genannten Punkte, und wie ich vermutete, muss noch etwas getan werden, um das Ergebnis zu erreichen.

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

enter image description here

+1

Dies ist eine sehr detaillierte und informative Frage. – Programmer

Antwort

3

Gelöst mit 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

Sie einen Blick auf Ihre Bilder nehmen, sieht es so aus:

  • Die alpha der Maske in die vollständige Kontrolle über die Ausgabe alpha ist
  • Sie die Alpha wollen des zu berücksichtigenden Hintergrundbildes

In Mit anderen Worten, Sie wollen nur Alpha, wo beide Bilder Alpha haben.


Ich habe noch nicht gelungen, in mehrere der Mischfunktionen zu sehen und wie sie funktionieren, und mit weiteren Details aktualisieren kann, wie Sie Ihre Ziele zu erreichen, wie ich es herausfinden, aber zu wissen, was Sie vielleicht versuchen zu erreichen wird Ihnen helfen, es herauszufinden, bevor ich dazu komme.

How to do blending in LibGDX - diese Frage scheint interessant, kombiniert die Quelle und Zielbilder in einem Raster, um die Effekte zu zeigen.

+0

Hallo, Danke für deine Antwort. Ich weiß, was ich zu erreichen versuche, ich weiß nicht, wie ich es machen soll. Ich denke, ich habe alle möglichen Mischfunktionen ausprobiert. also denke ich, es gibt etwas mehr als das, was getan werden muss. In dem Link, den du gepostet hast, wurde sogar geantwortet, dass es ein anderes Szenario ist. wie du es spezifiziert hast. – Rami

Verwandte Themen