【问题标题】:Image thresholding in LUA - LOVELUA 中的图像阈值处理 - LOVE
【发布时间】:2020-09-08 04:28:28
【问题描述】:

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

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

【问题讨论】:

    标签: lua love2d image-thresholding


    【解决方案1】:

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

    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
    

    结果:

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-11
      • 2020-01-25
      • 2020-11-12
      • 2021-02-10
      • 2015-10-19
      • 1970-01-01
      • 2016-11-17
      • 2017-02-28
      相关资源
      最近更新 更多