我想使用类似于Photoshop风格画笔的纹理(例如:http://designblurb.com/wp-content/uploads/2008/11/grungy-watercolor-brushes.jpg),并允许用户为其选择颜色,因此当它被绘制到屏幕上时灰色的黑色通过用户的选择变成彩色。在Android上在OpenGL ES中着色灰度纹理
有没有人知道实现这一目标的最佳方法?有纹理环境变量可以做到这一点吗?
任何信息,非常感谢。
我想使用类似于Photoshop风格画笔的纹理(例如:http://designblurb.com/wp-content/uploads/2008/11/grungy-watercolor-brushes.jpg),并允许用户为其选择颜色,因此当它被绘制到屏幕上时灰色的黑色通过用户的选择变成彩色。在Android上在OpenGL ES中着色灰度纹理
有没有人知道实现这一目标的最佳方法?有纹理环境变量可以做到这一点吗?
任何信息,非常感谢。
好吧,它只是结合纹理的颜色和一些常量的颜色。所以你有灰度纹理(无论是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的基础知识稍微有所了解,并将纹理与常量颜色相结合是最不容易的问题。
啊哈,我现在看到它生效了,但是看起来由于纹理主要是黑色,所以颜色没有太大影响。我想知道是否有不同的环境变量或混合函数可以创建更强的颜色,或者我应该减轻画笔灰度蒙版吗? – 2012-02-02 18:16:53
@TomPennetta嗯,当然,颜色是刷白色的地方。如果您的画笔以颜色表示黑色(您以某种方式建议您的图像),则需要切换颜色。如果你想让它更明亮,你还应该减轻它。确切的颜色只能由完全白色的部分给出,其他的只能是较暗的。您可以尝试使用alpha混合来获得附加效果(刷子多次涂刷时部件更亮),但我不知道这是否是您想要的。 – 2012-02-02 18:19:43
我明白了,我习惯了Photoshop,颜色越深,颜色越深。谢谢(你的)信息! – 2012-02-02 18:21:14