Colors 如何在glsl中为纹理着色

Colors 如何在glsl中为纹理着色,colors,textures,glsl,opengl-3,fragment-shader,Colors,Textures,Glsl,Opengl 3,Fragment Shader,我需要在运行时修改纹理的外观 一些示例可能会使用灰度来表示禁用,橙色用于选择等等 一个更好地展示我想要实现的小例子 现在我的FS看起来很简单 #version 330 in vec2 fragmentUV; out vec4 outputColor; uniform sampler2D textureNode; void main() { outputColor = texture(textureNode, fragmentUV).rgba; } 我想我可以通过将一个

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

一些示例可能会使用灰度来表示禁用,橙色用于选择等等

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

现在我的FS看起来很简单

#version 330

in vec2 fragmentUV;

out vec4 outputColor;

uniform sampler2D textureNode;

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

我想我可以通过将一个统一变量设置为一些硬编码的值来控制这些情况…

这就是如何将图像转换为灰度:


是否可以修改该着色器使其成为通用着色器?或者它只能用于灰色?你能详细说明吗?着色器的用途是将彩色图像转换为灰度。您发布的代码将纹理转换为灰度。我希望有一个着色器,在给定特定颜色的情况下(即:我希望它是灰色,而不是橙色),将纹理转换为相应的inputColor-scale。将其更改为gl_FragColor=vec4(vec3(灰度*目标颜色),1.0);变量重复是不必要的,现在所有GPU都是标量的。
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;
}