Emb*_*cro 5 android alpha blending opengl-es overlap
我正在开发Android游戏,我想知道为什么每当我用透明度绘制图像时,似乎总是会在透明部分添加一些黑色.这种情况一直发生,使我的一些效果看起来很奇怪.
这是一个例子.这两个圆圈只是带有模糊的白色图像,但是你可以看到一个圆圈与另一个重叠,它有一个阴影.如果我在Inkscape中说两个圆圈重叠,我会在它们重叠的地方得到纯白色.

我在用
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)
为了我的混合.
知道为什么会这样,我怎么能避免呢?
编辑:我唯一能想到的是两张图片有相同的z所以也许它们只与背景混合而不是彼此混合?
编辑:我改变了
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)
至
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_DST_ALPHA);
Run Code Online (Sandbox Code Playgroud)
这是我正在寻找的结果.

现在唯一的事情是,我所拥有的透明图像中的透明图像会被忽略,这是有道理的,因为我认为目标alpha是1.为什么One minus源会添加灰色?
Emb*_*cro 12
我想出了如何解决它.
我变了
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)
至
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)
事实证明,当你加载它时,Android会预先乘以PNG图像纹理的alpha值(使白色变为灰色).
我补充道
vColor.r = vColor.r * vColor.a;
vColor.g = vColor.g * vColor.a;
vColor.b = vColor.b * vColor.a;
Run Code Online (Sandbox Code Playgroud)
到我的顶点着色器为我的其他颜色进行乘法运算.
| 归档时间: |
|
| 查看次数: |
6564 次 |
| 最近记录: |