【发布时间】:2013-09-17 23:45:43
【问题描述】:
我正在尝试使用片段着色器调整纹理颜色。我的片段着色器超级简单:
uniform sampler2D sampler;
void main() {
vec4 tex = texture2D ( sampler, uvVarying );
gl_FragColor = vec4(tex.r, tex.g, tex.b, tex.a);
}
这会按预期绘制我的狗纹理:
如果我将着色器更改为
gl_FragColor = vec4(tex.r, tex.g, tex.b, 1.0);
结果如我所愿,透明度信息丢失:
但如果我改为将其设置为:
gl_FragColor = vec4(tex.r, tex.g, tex.b, 0.0);
我原以为它会完全消失,但我得到了:
发生了什么事??
对于我最初的问题:我想为我的纹理添加一点红色调:
gl_FragColor = vec4(tex.r + 0.5, tex.g, tex.b, tex.a);
现在,我希望它具有与原始纹理相同的透明度信息,但结果却是:
我在这里错过了什么。纹理使用引擎的默认混合,即src = GL_ONE, dst = GL_ONE_MINUS_SRC_ALPHA。
【问题讨论】:
-
好吧,这似乎与纹理具有预乘 alpha 的事实有关。如果我在没有它的情况下加载纹理,它看起来就像我预期的那样。
标签: opengl opengl-es opengl-es-2.0 glsl fragment-shader