我正在尝试屏蔽小于遮罩的背景图像。并且背景和面具之间的空间显示为黑色。
这是我正在使用的代码:
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());
答案 0 :(得分: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());
答案 1 :(得分:0)
只是看看你的图片,看起来像是:
换句话说,你只想要两个图像都有alpha的alpha。
我还没有能够研究更多的混合功能及其工作方式,并且可能会更新有关如何实现目标的更多细节,但我可能知道你在尝试什么实现将帮助你在我达到目标之前解决它。
How to do blending in LibGDX - 这个问题似乎很有意思,将源图像和目标图像组合在一个网格中以显示效果。