包含alpha的蒙版图像会使内蒙版变黑

我试图掩盖比面具更小的背景图片。 并且背景和蒙版之间的空间显示为黑色。

这是我正在使用的代码:

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

在这里输入图像描述


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

只是看看你的图片,它看起来像:

  • 掩码的alpha值完全控制输出alpha
  • 你希望背景图像的alpha也被考虑在内
  • 换句话说,你只想要两个图像都有alpha的alpha。


    我还没有看到更多的混合函数以及它们是如何工作的,并且可以更新关于如何实现您的目标的详细信息,但我可能知道您正在尝试完成的任务会帮助您在我开始之前弄清楚它。

    如何在LibGDX中进行混合 - 这个问题似乎很有趣,将网格中的源图像和目标图像组合起来以显示效果。

    链接地址: http://www.djcxy.com/p/30309.html

    上一篇: Masking image that contains alpha makes the inner mask black

    下一篇: conditional graph in tensorflow and for loop that accesses tensor size