0

In order to only have only one input image for a "spread like" effect I would like to do some threshold operation on some drawable or to find any other way that work.

Are there any such tools in LOVE2d/Lua ?

1 Answers1

0

I'm not exactly sure about the desired outcome, the "spread like" effect, but to create thresholding, you best use pixel shader something like this.

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
}

This code calculates the average of RGB for each pixel and if the average is below threshold, it changes alpha of that pixel to 0 to make it invisible.

To use the pixel effect in your code you need to do something like this (only once, perhaps in love.load):

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

and when drawing the image:

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

To adjust the threshold:

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

Result:

result of drawing operation

References:

IsawU
  • 430
  • 3
  • 12