LUA中的图像阈值-爱

问题描述 投票:0回答:1

为了只具有一个“散布状”效果的输入图像,我想对某些可绘制对象进行一些阈值运算或找到其他可行的方法。

LOVE2d / Lua中是否有这样的工具?

lua love2d image-thresholding
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

结果:

result of drawing operation

参考:

© www.soinside.com 2019 - 2024. All rights reserved.