希望这是一个简单的问题:我有一个OpenGL纹理,并希望能够改变它的不透明度,我该怎么做?纹理已经有一个alpha通道,并且混合工作正常,但我希望能够降低整个纹理的不透明度,使其淡入背景.我已经摆弄glBlendFunc,但没有运气 - 似乎我需要类似的东西GL_SRC_ALPHA_MINUS_CONSTANT,这是不可用的.我正在使用OpenGL ES在iPhone上工作.
Dan*_*Dan 16
我不知道OpenGL ES,但在标准的OpenGL中你可以通过在使用之前为纹理声明颜色来设置不透明度:
// R, G, B, A
glColor4f(1.0, 1.0, 1.0, 0.5);
Run Code Online (Sandbox Code Playgroud)
该示例将为您提供50%的alpha而不会影响纹理的颜色.通过调整其他值,您也可以移动纹理颜色.
使用纹理合成器.设置纹理阶段以GL_MODULATE在纹理和恒定颜色之间执行操作.然后从代码(glTexEnv,GL_TEXTURE_ENV_COLOR)中更改常量颜色.
就性能而言,这应该是"免费的".在大多数(如果不是全部)图形芯片组合器操作采用相同数量的GPU周期(通常为1),因此仅使用纹理与进行调制操作(或任何其他操作)的成本完全相同.
谢谢大家的想法。我\xe2\x80\x99都玩过glColor4f和glTexEnv,最后强迫自己仔细阅读glTexEnv联机帮助页。手册页说,在 GL_MODULATE 纹理模式下,结果颜色是通过将传入片段乘以纹理颜色 (C=Cf\xc3\x97Ct) 来计算的,对于 alpha 也是如此。我尝试了 glColor4f(1, 1, 1, opacity) 但这不起作用,但是将所需的不透明度传递给调用的所有四个参数就可以了。(但仍然不确定为什么。)
\n| 归档时间: |
|
| 查看次数: |
13909 次 |
| 最近记录: |