【发布时间】:2019-04-21 00:45:33
【问题描述】:
我正在使用 OpenGL ES 3。我想绘制透明图像。图像的某些像素可能具有 0% 到 100% 的透明度。我还希望能够设置一个 argb 值来更改整个图像的颜色和透明度。
我最终得到了以下解决方案。
渲染:
GL.Enable(EnableCap.Blend);
GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha);
GL.Uniform4(shader.UniformColor, color);
GL.BindTexture(TextureTarget.Texture2D, sprite.TextureId);
...
片段着色器:
void main()
{
fragColor = texture(text, textureCoordinate) * color;
}
现在的问题是,当我设置透明颜色时,混合完成错误,图像变得更亮。它似乎没有正确地与背景混合。当我使用 BlendingFactorSrc.SrcAlpha 时,透明度是正确的,但图像周围有一个深色边框。
有没有人能解决这个问题?我研究了很多,深色边框的解决方案是使用混合源因子一。但如上所述,我遇到了另一个问题。
感谢您的帮助!
编辑:这是问题的说明: https://i.stack.imgur.com/LAw3K.png
【问题讨论】:
-
检查online blendfunc tool。 SrcAlpha 应该没问题,你的资产可能有问题。
-
谢谢,但资产似乎没有问题。在这个工具中看起来不错。用插图查看我的编辑。
标签: shader alphablending opengl-es-3.0