0

为了只有一个输入图像具有“类似传播”的效果,我想对一些可绘制对象进行一些阈值操作或找到任何其他可行的方式。

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

4

1 回答 1

0

我不太确定想要的结果,即“类传播”效果,但要创建阈值,您最好使用类似这样的像素着色器。

extern float threshold;    //external variable from our lua script

vec4 effect(vec4 color, Image tex, vec2 texture_coords, vec2 screen_coords)
{
    vec4 texturecolor = Texel(tex, texture_coords); //default shader code

    //get average color of pixel
    float average = (texturecolor[0] + texturecolor[1] + texturecolor[2])/3;
    //set alpha of pixel to 0 if average of RGB is below threshold
    if (average < threshold) {
        texturecolor[3] = 0;
    }

    return texturecolor * color;    //default shader code
}

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

要在代码中使用像素效果,您需要执行以下操作(仅一次,可能在 中love.load):

shader = love.graphics.newShader([==[ ... shader code above ... ]==])

并在绘制图像时:

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

调整阈值:

shader:send("threshold", number)    --0 to 1 float

结果:

绘图操作的结果

参考:

于 2020-05-22T10:05:25.680 回答