0

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

Sprite 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);
}

所以,有了这个着色器,我们将做精灵灰色......

帮我写代码。

4

1 回答 1

0

您可以创建一个用作颜色转换器的 3D 纹理。您基本上使用原始颜色值作为 3D 纹理查找中的纹理坐标。我之前用 9^3 和 16^3 纹理完成了这个,用于非常简单的颜色转换。您必须针对您的具体情况仔细评估 3D 纹理大小。

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

你可能会得到一些更简单的东西,但这个问题的信息太少了。

于 2013-05-22T11:50:17.963 回答