gpt4 book ai didi

java - 修改LibGDX中纹理的透明度

转载 作者:行者123 更新时间:2023-12-02 08:13:31 24 4
gpt4 key购买 nike

我想要将前景纹理叠加在背景纹理上。除了这两个纹理之外,我还有一个 mask 来指示前景的哪些部分应该是透明的。这是我尝试过的:

// Initially, the mask should have an alpha of 1
Pixmap mask = new Pixmap(128, 128, Pixmap.Format.Alpha);

// Cut a rectangle of alpha value 0
mask.setColor(new Color(0f, 0f, 0f, 0f));
mask.fillRectangle(0, 0, 32, 32);

// Load the foreground. The foreground should the same alpha values
// as the mask. If the mask has an alpha value of 1, then the foreground is
// visible. If the mask is 0, then the foreground is invisible.
Pixmap fg = new Pixmap(Gdx.files.internal("foreground.png"));
fg.drawPixmap(mask, fg.getWidth(), fg.getHeight());
Texture foreground = new Texture(fg);

Texture background = new Texture("background.png");

不用说,结果不是我想要的。我应该更改什么,以便在蒙版的 alpha 值为 0 的任何地方背景都可见,并且在蒙版的 alpha 值为 1 的任何地方前景都可见。

最佳答案

我认为这里的问题是混合。 Pixmap.setBlending()默认设置为 SourceOver。这意味着绘制一个 alpha 0 的矩形根本不会产生任何变化,因为您绘制了一个不可见的矩形。尝试将其设置为 Pixmap.Blending.None 以真正剪切出矩形。

// Initially, the mask should have an alpha of 1
Pixmap mask = new Pixmap(128, 128, Pixmap.Format.Alpha);

// Cut a rectangle of alpha value 0
mask.setBlending(Pixmap.Blending.None);
mask.setColor(new Color(0f, 0f, 0f, 0f));
mask.fillRectangle(0, 0, 32, 32);

Pixmap fg = new Pixmap(Gdx.files.internal("foreground.png"));
fg.drawPixmap(mask, fg.getWidth(), fg.getHeight());
mask.setBlending(Pixmap.Blending.SourceOver);

Texture foreground = new Texture(fg);
Texture background = new Texture("background.png");

实际上,您甚至不需要创建 mask ,而是可以直接“剪切”前景像素图上的矩形。

关于java - 修改LibGDX中纹理的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20469529/

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