我有一个径向渐变纹理(RGBA),它从中心的完全不透明的黑色到边缘的完全透明的颜色:
我使用最近使用 GLKit 的 OpenGL 模板设置了一个 iOS 项目。我添加了纹理功能,并在 setupGL 方法中设置了以下代码:
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
当我在白色背景上的正交投影中重叠其中两个纹理(每个都有一个单独的 z)时,我希望是这样的:
但相反,我得到了这个:
我的问题很简单:为什么?OpenGL ES 2.0 的混合不能达到这个效果吗?(我之前在 OpenGL ES 1.1 中已经让它工作了)我缺少一个常见的东西吗?这可能是我的纹理的预乘 alpha 问题吗?如果是这样,我的 PNG 或我加载它的方式会不会有些奇怪?我正在使用 GLKTextureLoader 加载纹理。
很可能我错了,但我知道这不可能是着色器问题,因为 alpha 混合发生在它到达片段着色器之前。我的着色器只是直接传递信息。(也许这是个问题?)
顶点着色器:
attribute vec4 position;
attribute vec2 texCoordIn;
varying vec2 texCoordOut;
uniform mat4 modelViewProjectionMatrix;
void main()
{
gl_Position = modelViewProjectionMatrix * position;
texCoordOut = texCoordIn;
}
片段着色器:
varying lowp vec2 texCoordOut;
uniform sampler2D texture;
void main()
{
gl_FragColor = texture2D(texture, texCoordOut);
}
我也尝试如下设置 glBendFunc ,但得到相同的结果:
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
欢迎任何提示或常见的挂断。谢谢!