在OpenGL中更改纹理不透明度

希望这是一个简单的问题:我有一个OpenGL纹理,希望能够改变其不透明度,我该怎么做? 纹理已经有一个alpha通道和混合工作正常,但我希望能够减少整个纹理的不透明度,淡入到背景中。 我弄弄了glBlendFunc ,但没有运气 - 似乎我需要像GL_SRC_ALPHA_MINUS_CONSTANT这样的东西,这是不可用的。 我正在使用OpenGL ES开发iPhone。


我不知道OpenGL ES,但在标准的OpenGL中,您可以在使用之前声明纹理的颜色来设置不透明度:

//          R,   G,   B,   A
glColor4f(1.0, 1.0, 1.0, 0.5);

这个例子会给你50%的alpha值,而不会影响纹理的颜色。 通过调整其他值,您也可以移动纹理颜色。


使用纹理组合器。 设置纹理阶段以在纹理和常量颜色之间执行GL_MODULATE操作。 然后改变代码中的常量颜色( glTexEnvGL_TEXTURE_ENV_COLOR )。

就性能而言,这应该是“免费”的。 在大多数(如果不是全部的话)图形芯片组合器操作采用相同数量的GPU周期(通常为1),所以仅使用纹理而不是调制操作(或任何其他操作)的成本是完全相同的。


谢谢大家的想法。 我已经与glColor4f和glTexEnv一起玩,并最终强迫自己仔细阅读glTexEnv手册页。 该手册说,在GL_MODULATE纹理模式下,生成的颜色是通过将输入片段乘以纹理颜色(C = Cf×Ct)来计算的,对于alpha也是如此。 我尝试了glColor4f(1,1,1,opacity),但这并不起作用,但将所需的不透明度传递给调用的所有四个参数都有效。 (尽管如此,仍然不确定。)

链接地址: http://www.djcxy.com/p/33887.html

上一篇: Change texture opacity in OpenGL

下一篇: Copying data from one texture to another