【问题标题】:How to color a texture in glsl如何在 glsl 中为纹理着色
【发布时间】:2014-07-15 07:52:00
【问题描述】:

我需要在运行时修改纹理的外观..

一些例子可能会用灰度来表示它们被禁用,橙色表示选择等等

一个小例子可以更好地展示我想要实现的目标

现在我的 FS 看起来很简单

#version 330

in vec2 fragmentUV;

out vec4 outputColor;

uniform sampler2D textureNode;

void main()
{    
    outputColor = texture(textureNode, fragmentUV).rgba;
}

我认为我可以通过将统一变量设置为一些硬编码值来控制这几种情况...

【问题讨论】:

    标签: colors textures glsl opengl-3 fragment-shader


    【解决方案1】:

    这就是将图像转换为灰度的方法:http://glsl.heroku.com/e#18369.1

    float grayScale = dot(imageColor.rgb, vec3(0.299, 0.587, 0.114));
    if (IsGrayScale){
      gl_FragColor = vec4(grayScale, grayScale, grayScale, 1.0);
    } else{
      gl_FragColor = imageColor;
    }
    

    【讨论】:

    • 是否可以修改该着色器以使其通用?还是只能用于灰色?
    • @elect 你能详细说明一下吗?着色器的目的是将彩色图像转换为灰度。
    • 您发布的代码将纹理转换为灰度。我希望有一个着色器,在给定特定颜色(即:而不是灰色,我希望将其设置为橙色)的情况下,将纹理转换为相应的 inputColor-scale。
    • 将其更改为 gl_FragColor = vec4(vec3(grayScale * targetColor), 1.0);变量重复是不必要的,现在所有的 GPU 都是标量的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多