Я не совсем уверен насчет желаемого результата, эффекта «подобного распространения», но для создания порогового значения лучше всего использовать пиксельный шейдер примерно так.
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 для каждого пикселя, и если среднее значение ниже порога, он изменяет альфа этого пикселя на 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
Результат:
Использованная литература:
person
IsawU
schedule
22.05.2020