Ten*_*r04 5 iphone android opengl-es
我有粒子,我希望能够改变代码的颜色,所以可以使用任何颜色.所以我只有一个基本上具有亮度的纹理.
我一直在用glColor4f(1f, 0f, 0f, 1f);这种颜色.
我尝试过的每一个blendfunc都接近工作,就像下面的最后一张图片一样.我仍然希望保留亮度,就像在中间的图片中一样.(如果颜色图层位于纹理图层的顶部,则类似于Photoshop中的叠加或柔光滤镜.)
没有可编程着色器的任何想法如何做到这一点?此外,由于这些是粒子,我不想在它后面有一个黑盒子,我想把它添加到场景中.

这是一个可能接近您正在寻找的解决方案:
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glActiveTexture( GL_TEXTURE0 );
glEnable( GL_TEXTURE_2D );
glBindTexture(GL_TEXTURE_2D, spriteTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
glActiveTexture( GL_TEXTURE1 );
glEnable( GL_TEXTURE_2D );
glBindTexture(GL_TEXTURE_2D, spriteTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD );
Run Code Online (Sandbox Code Playgroud)
它的作用是将原始纹理乘以指定的颜色,然后在顶部添加原始纹理的像素值:
final_color.rgba = original_color.rgba * color.rgba + original_color.rgba;
Run Code Online (Sandbox Code Playgroud)
这将产生比您要求的更明亮的图像,但通过一些调整可能足够好.
如果要保留纹理的alpha值,则需要使用GL_COMBINE而不是GL_ADD(+正确设置GL_COMBINE_RGB和GL_COMBINE_ALPHA).
以下是在纹理上使用此技术的一些结果.

| 归档时间: |
|
| 查看次数: |
7252 次 |
| 最近记录: |