-3

这是一个着色器的例子:

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 变量中。什么是想法和算法?例如,如果想要获得红色边缘而不是蓝色边缘,我需要如何修改输入纹理。

谢谢。

4

1 回答 1

2

这个特殊的过滤器由 Lev Zelensky 编写,他在他的博客上描述了它的配置。

基本上,您从基本 RGB 查找表开始,将其放入 Photoshop 并应用您想要重现的颜色效果,然后获取生成的图像并将其用作此过滤器的查找表。对于图像中的每个 RGB 值,将找到并使用该表中最接近的匹配而不是原始颜色。

至于为什么您在图像外部看到蓝色调,请确保您正确生成和保存查找表,并将其添加到过滤器的正确输入槽中。

于 2013-08-12T18:49:38.867 回答