OpenGL着色器生成颜色

OpenGL着色器生成颜色,opengl,shader,gpu,fragment-shader,vertex-shader,Opengl,Shader,Gpu,Fragment Shader,Vertex Shader,我有一个雪碧10x10像素。如何使用着色器程序实时更改颜色。 雪碧上所有的蓝色都变成了绿色。 雪碧上所有的绿色都变成了白色。 等等 这是具有灰色效果的测试着色器的示例: #ifdef GL_ES precision mediump float; #endif varying vec2 v_texCoord; uniform sampler2D u_texture; void main() { vec4 normalColor = texture2D(u_texture, v_tex

我有一个雪碧10x10像素。如何使用着色器程序实时更改颜色。 雪碧上所有的蓝色都变成了绿色。 雪碧上所有的绿色都变成了白色。 等等

这是具有灰色效果的测试着色器的示例:

#ifdef GL_ES
precision mediump float;
#endif

varying vec2 v_texCoord;
uniform sampler2D u_texture;

void main()
{
    vec4 normalColor = texture2D(u_texture, v_texCoord);
    float gray = 0.299*normalColor.r + 0.587*normalColor.g + 0.114*normalColor.b;
    gl_FragColor = vec4(gray, gray, gray, normalColor.a);
}
所以,使用这个着色器,我们将使用精灵灰


帮助我编写代码。

您可以创建一个3D纹理,用作颜色转换器。在3D纹理查找中,基本上使用原始颜色值作为纹理坐标。我以前用9^3和16^3的纹理做过这个,非常简单的颜色转换。您必须仔细评估特定情况下的3D纹理大小

这可能不是最简单的解决方案,但至少它是灵活的,不涉及片段着色器中的硬编码检查

你可以做一些简单的事情,但问题的信息太少