我使用GPUImage库,并使用片段着色器编写自己的自定义过滤器。
我有一张上面有黑色文字的图片。我想创造一些像“滴影”,但在红色。这很容易,我只是简单地偏移坐标,检查颜色,如果我碰到“不是白色”的东西,我就把它改成红色。
当我创建过滤器时,我决定纯红色并不适合,我想稍微调整一下颜色。所以我修改了绿色和蓝色的值。一旦我这样做了,整个形象变成红色.我不知道我做错了什么.为什么我会有这样的效果?
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
lowp vec4 offsetCoordinate(highp vec2 coordinate, lowp float x, lowp float y) {
highp vec2 newCoordinate = textureCoordinate;
newCoordinate.x = textureCoordinate.x + x;
newCoordinate.y = textureCoordinate.y + y;
return texture2D(inputImageTexture, newCoordinate);
}
void main()
{
lowp vec4 inputColor = texture2D(inputImageTexture, textureCoordinate);
if (inputColor.r > 0.1 && inputColor.g > 0.1 && inputColor.b > 0.1) {
lowp vec4 outputColor = offsetCoordinate(textureCoordinate, 0.1, 0.03);
outputColor.r = 1.0;
outputColor.g = 0.09;
outputColor.b = 0.09;
gl_FragColor = outputColor;
} else {
gl_FragColor = inputColor;
}
}这里有一个不更改g & b值的版本:

这里是设置了g和b值的版本。

我在想为什么会发生这种事?
发布于 2015-11-26 21:00:10
你得到的结果正是你的着色器应该得到的。
您的输入图像只包含白色和黑色像素,因此
lowp vec4 outputColor = offsetCoordinate(textureCoordinate, 0.1, 0.03);会产生(0,0,0,A)或(1,1,1,A) (不知道你会得到什么alpha值,但这不重要)。
如果您用1覆盖outputColor.r,您将将黑色更改为红色( 1,0,0,A),而白色将保持白色。
如果覆盖r、g和b,您将得到(r,g,b,A),因此颜色将完全独立于从纹理中获取的颜色。
https://stackoverflow.com/questions/33946546
复制相似问题