我希望能够在代码中更改粒子的颜色,因此可以使用任何颜色。所以我只有一种基本上具有亮度的纹理。
我一直在使用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 );
它的作用是将原始纹理乘以指定的颜色,然后将原始纹理的像素值添加到顶部:
final_color.rgba = original_color.rgba * color.rgba + original_color.rgba;
这将产生比您要求的更亮的图像,但经过一些调整可能就足够了。
如果您想保留纹理的 alpha 值,则需要使用 GL_COMBINE 而不是 GL_ADD(+正确设置 GL_COMBINE_RGB 和 GL_COMBINE_ALPHA)。
Here are some results using this technique on your texture.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)