A闪的 BLOG 技术与人文
第二篇图像滤镜算法的文章,这篇文章种依然用我的照片来做实例,上图就是在Love2D种原图的图片效果。
现在我们要编写一段shader,将图片变为底片效果,最终效果如下图(又是一次自毁形象的行为):
这种效果也非常简单,在原有的RGB颜色值种,我们分别对三原色的数值取反,再将结果设置为最终颜色,则可得到底片效果。
代码如下:
function love.load()
image = love.graphics.newImage("img.jpg")
myShader = love.graphics.newShader[[
vec4 effect( vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords ){
vec4 pixel = Texel(texture, texture_coords );
pixel.r = 1-pixel.r;
pixel.g = 1-pixel.g;
pixel.b = 1-pixel.b;
return pixel;
}
]]
end
function love.draw()
love.graphics.setShader(myShader)
love.graphics.draw(image)
love.graphics.setShader()
end
其中算法公式非常简单,公式如下:
R = 255 - R; G = 255 - G; B = 255 - B;
值得注意的是,在我们的shader种,颜色值取值范围为0-1,所以并不存在255这个数字,需要特殊注意。