编辑 1:包含的着色器
编辑 2:包括屏幕截图
编辑 3:包括原始纹理的屏幕截图
编辑 4:
编辑5:我认为问题是因为我的位图一开始就有部分透明的像素,所以我会问一个新问题,因为这里给出的答案对于这个问题是正确的。
仔细检查,问题似乎并没有完全解决,颜色看起来不正确。
String strFShader =
"precision mediump float;" +
"uniform float Opacity;" +
"varying vec2 v_texCoords;" +
"uniform sampler2D u_baseMap;" +
"void main()" +
"{" +
"gl_FragColor = texture2D(u_baseMap, v_texCoords);" +
"gl_FragColor.a *= Opacity;"+
"}";
然后在我的渲染方法中:
//Enable and set mode
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
//Draw
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
//Disable
GLES20.glDisable(GLES20.GL_BLEND);
因此,在最大透明度 (0.0) 时,一切都很好,即没有绘制任何内容。但是在任何其他级别都不太正确,例如,在零透明度(不透明度设置为 1.0)时,这就是我得到的:
![在此处输入图像描述][1]
但它实际上应该是这样的:
![在此处输入图像描述][2]
颜色看起来有点太暗了,(在原始图像上),曾经如此微暗的边缘真的很明显。
我假设这与混合模式有关?基本上我只是在改变一层的不透明度时可能会在Photoshop中获得效果。任何其他建议都会非常有帮助。
我也尝试了这里找到的解决方案:
但我得到相同的结果?
谢谢 :-)