为了只具有一个“散布状”效果的输入图像,我想对某些可绘制对象进行一些阈值运算或找到其他可行的方法。
LOVE2d / Lua中是否有这样的工具?
我不确定所需的结果,即“散布”效果,但是要创建阈值,最好使用像这样的像素着色器。
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
结果:
参考: