我正试图获得一个相当简单的效果;我希望我的精灵能够使用GL使用的alpha通道(即,半透明的图像部分,但不是全部)以及整个精灵都有一个“不透明”级别,影响整个精灵。
我有后一部分,这很简单,使用GL_MODULATE并传递color4d(不透明度,不透明度,不透明度,不透明度)。像梦一样工作。
但问题出在第一部分;部分半透明的图像。我以为我可以扔出一个glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);并启用混合,但遗憾的是它没有这样做。它似乎做的是“美白”有问题的图像的颜色,而不是使其半透明。在它下面传递的任何其他精灵都表现得好像是一块坚固的颜色,直接切断。
作为参考,我已禁用光照,z缓冲,颜色材质和alpha测试。遮阳模型是否平整,以防万一。但除此之外,我正在使用默认的ortho设置。我正在使用teximage2d来处理有问题的纹理,我确信格式和GL_RGBA都设置正确。
如何在混合过程中让GL考虑纹理的alpha通道?
答案 0 :(得分:1)
最简单,最快速的解决方案是使用片段着色器。
uniform float alpha;
uniform sampler2D texture;
main(){
gl_FragColor = texture2d(texture, gl_TexCoords);
gl_FragColor.a *= alpha;
}
答案 1 :(得分:1)
所以问题出在其他地方......你的描述听起来好像你实际上没有禁用Z-test,而且你不会将你的精灵渲染回来。如果你将精灵画回到前面,GL中的Alpha混合只会做你想要的。否则,精灵会以错误的顺序混合,这不会产生正确的输出。
用你所观察到的图片验证这一点会更容易。