从半色调滤镜中去除黑白效果

时间:2014-03-18 05:22:44

标签: ios iphone opengl-es opengl-es-2.0

在Brad Larson的优秀GPUImage中,有一个半色调滤镜,也可以将画面变成黑白。我只是想要没有黑色和白色的半色调效果,我想知道任何人都可以告诉我如何从以下代码中删除以解决这个问题?一直在玩它,但几乎没有openGL的经验,我不知道该消除什么。

NSString *const kGPUImageHalftoneFragmentShaderString = SHADER_STRING
(
 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;

 uniform highp float fractionalWidthOfPixel;
 uniform highp float aspectRatio;
 uniform highp float dotScaling;

 const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);

 void main()
 {
     highp vec2 sampleDivisor = vec2(fractionalWidthOfPixel, fractionalWidthOfPixel / aspectRatio);

     highp vec2 samplePos = textureCoordinate - mod(textureCoordinate, sampleDivisor) + 0.5 * sampleDivisor;
     highp vec2 textureCoordinateToUse = vec2(textureCoordinate.x, (textureCoordinate.y * aspectRatio + 0.5 - 0.5 * aspectRatio));
     highp vec2 adjustedSamplePos = vec2(samplePos.x, (samplePos.y * aspectRatio + 0.5 - 0.5 * aspectRatio));
     highp float distanceFromSamplePoint = distance(adjustedSamplePos, textureCoordinateToUse);

     lowp vec3 sampledColor = texture2D(inputImageTexture, samplePos ).rgb;
     highp float dotScaling = 1.0 - dot(sampledColor, W);

     lowp float checkForPresenceWithinDot = 1.0 - step(distanceFromSamplePoint, (fractionalWidthOfPixel * 0.5) * dotScaling);

     gl_FragColor = vec4(vec3(checkForPresenceWithinDot), 1.0);
 }
);

1 个答案:

答案 0 :(得分:4)

您可以将最后一行更改为

gl_FragColor = vec4(checkForPresenceWithinDot * sampledColor, 1.0);

这将使效果只有颜色而不是黑白。