gpt4 book ai didi

opengl - 包含 Alpha 的 mask 图像使内部 mask 变黑

转载 作者:行者123 更新时间:2023-12-02 03:20:03 25 4
gpt4 key购买 nike

我正在尝试遮盖比 mask 小的背景图像。背景和蒙版之间的空间显示为黑色。

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

最佳答案

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

关于opengl - 包含 Alpha 的 mask 图像使内部 mask 变黑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33631544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com