在Android上的OpenGL ES中着色灰度纹理

时间:2012-02-02 16:25:20

标签: android opengl-es colors mask brush

我想使用类似于Photoshop风格画笔的纹理(例如:http://designblurb.com/wp-content/uploads/2008/11/grungy-watercolor-brushes.jpg),并允许用户为其选择颜色,因此当它被绘制到屏幕时,灰色的黑色变为彩色由用户选择。

有谁知道实现这一目标的最佳方法?是否有可以做到这一点的纹理环境变量?

非常感谢任何信息。

1 个答案:

答案 0 :(得分:3)

嗯,它归结为将纹理的颜色与一些恒定的颜色相结合。所以你有灰度纹理(无论是GL_RGB纹理,颜色的所有成分具有相同的值,还是只有GL_LUMINANCE纹理)。两种颜色的实际组合取决于您的OpenGL ES版本。

在ES 1中,您只需使用GL_MODULATE纹理环境将纹理颜色与对象的/顶点颜色相乘(通过照明计算或由glColor设置或glColorPointer如果照明被禁用,这似乎是你的情况):

glColor(...);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
//draw a textured object

在ES 2中,你当然必须在片段着色器中自己完成:

uniform sampler2D tex;
uniform vec4 color;

varying vec2 texCoord;

void main()
{
    gl_FragColor = color * texture2D(tex, texCoord).r;
}

如果所有这些事情都没有告诉你任何事情(取决于你的版本),那么你应该深入研究一下OpenGL ES的基础知识,并且将纹理与恒定颜色组合是最不容易的问题。