首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碎片着色器-当改变碎片颜色时的“奇怪”行为-检测为不同的值。

碎片着色器-当改变碎片颜色时的“奇怪”行为-检测为不同的值。
EN

Stack Overflow用户
提问于 2015-11-26 20:30:40
回答 1查看 51关注 0票数 0

我使用GPUImage库,并使用片段着色器编写自己的自定义过滤器。

我有一张上面有黑色文字的图片。我想创造一些像“滴影”,但在红色。这很容易,我只是简单地偏移坐标,检查颜色,如果我碰到“不是白色”的东西,我就把它改成红色。

当我创建过滤器时,我决定纯红色并不适合,我想稍微调整一下颜色。所以我修改了绿色和蓝色的值。一旦我这样做了,整个形象变成红色.我不知道我做错了什么.为什么我会有这样的效果?

代码语言:javascript
复制
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值的版本:

这里是设置了gb值的版本。

我在想为什么会发生这种事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-26 21:00:10

你得到的结果正是你的着色器应该得到的。

您的输入图像只包含白色和黑色像素,因此

代码语言:javascript
复制
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),而白色将保持白色。

如果覆盖rgb,您将得到(r,g,b,A),因此颜色将完全独立于从纹理中获取的颜色。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33946546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档