LUA中的图像阈值 - LOVE

为了只有一个输入图像进行"扩散式"效果,我想在一些可绘制的图形上进行一些阈值操作,或者找到其他有效的方法。

LOVE2d/Lua中有这样的工具吗?

点赞
用户3371355
用户3371355

我不是很确定所需的效果,“像扩展”效果,但是要创建阈值效果,最好使用像这样的像素着色器。

extern float threshold;   // 来自我们 Lua 脚本的外部变量

vec4 effect(vec4 color, Image tex, vec2 texture_coords, vec2 screen_coords)
{
    vec4 texturecolor = Texel(tex, texture_coords); //默认着色器代码

    //获取像素平均颜色
    float average = (texturecolor[0] + texturecolor[1] + texturecolor[2])/3;
    //如果 RGB 平均值低于阈值,则将 alpha 值设为 0,使其不可见
    if (average < threshold) {
        texturecolor[3] = 0;
    }

    return texturecolor * color;   //默认着色器代码
}

该代码计算每个像素的 RGB 平均值,如果平均值低于阈值,则将该像素的 alpha 值更改为 0,使其不可见。

要在代码中使用像素效果,请像这样进行操作(只需一次,可能在 love.load 中):

shader = love.graphics.newShader([==[ ... 上面的着色器代码 ... ]==])

绘制图像时:

love.graphics.setShader(shader)
love.graphics.draw(img)
love.graphics.setShader()

要调整阈值:

shader:send("threshold", number)    // 0 到 1 的浮点数

结果:

result of drawing operation

参考资料:

2020-05-22 10:05:25