以下是着色器的示例:
varying highp vec2 textureCoordinate;
varying highp vec2 textureCoordinate2; // TODO: This is not used
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2; // lookup texture
void main()
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
mediump float blueColor = textureColor.b * 63.0;
mediump vec2 quad1;
quad1.y = floor(floor(blueColor) / 8.0);
quad1.x = floor(blueColor) - (quad1.y * 8.0);
mediump vec2 quad2;
quad2.y = floor(ceil(blueColor) / 8.0);
quad2.x = ceil(blueColor) - (quad2.y * 8.0);
highp vec2 texPos1;
texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);
texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g);
highp vec2 texPos2;
texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);
texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g);
lowp vec4 newColor1 = texture2D(inputImageTexture2, texPos1);
lowp vec4 newColor2 = texture2D(inputImageTexture2, texPos2);
lowp vec4 newColor = mix(newColor1, newColor2, fract(blueColor));
gl_FragColor = vec4(newColor.rgb, textureColor.w);
}
此着色器可添加图像周围蓝色边缘的效果。它使用额外的纹理进行计算。这是纹理: https://github.com/BradLarson/GPUImage/blob/master/framework/Resources/lookup.png 有人可以解释这种纹理的目的。在代码中,此纹理存储在inputImageTexture2变量中。什么是想法和算法? 例如,如果想要获得红色边缘而不是蓝色,我需要如何修改输入纹理。
感谢。
答案 0 :(得分:2)
这个特殊的过滤器是由Lev Zelensky编写的,他在his blog上描述了它的配置。
基本上,您从基本RGB查找表开始,将其带入Photoshop并应用要重现的颜色效果,然后获取生成的图像并将其用作此过滤器的查找表。对于图像中的每个RGB值,将找到并使用该表中最接近的匹配,而不是原始颜色。
至于为什么在图像外部看到蓝色调,请确保正确生成并保存查找表,并将其添加到过滤器的右侧输入槽中。