我将一个非常简单的代码从OpenGLES 1.0移植到OpenGLES 2.0。将混合问题从OpenGLES 1.0移植到2.0(iOS)
在原来的版本,我已经融合了
glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
启用我使用相同的代码在我的ES 2.0的实现,因为我需要什么是渲染缓冲器混合的新渲染的四边形(我保留渲染缓冲区,我无法重新渲染场景)。
我使用了一个纹理(alpha值显示从中心到外部的径向渐变,alpha从1到0),用作alpha蒙版,只包含具有不同alpha值的白色像素。我给我的顶点使用与100/255的alpha相同的颜色。我的背景是透明的黑色。在那之下,我有一个普通的白色表面(UIView)。我呈现4个四边形。
结果与OpenGLES 1.0(期望的结果)
我的意见告诉我,该片段着色器应该简单地:
gl_FragColor = DestinationColor * texture2D(Texture, TexCoordOut);
(我用我的顶点尝试不同的价值观得到了这样的结论)
我想写一些OpenGL 2.0代码(包括顶点+片段着色器),它会给我确切的山姆e的结果就像在OpenGLES 1.0中一样,没有什么比这更少的了。除了在纹理上应用顶点颜色之外,我不需要/不想在片段着色器中进行任何混合。使用简单的着色器,这里是我得到的结果:
我尝试了几乎所有*,+,混合我可以想到的组合,但我无法重现相同的结果。这是我迄今为止最接近的,但是这绝对不是正确的(并且不作任何任何意义)
varying lowp vec4 DestinationColor;
varying lowp vec2 TexCoordOut;
uniform sampler2D Texture;
void main(void) {
lowp vec4 texture0Color = texture2D(Texture, TexCoordOut);
gl_FragColor.rgb = mix(texture0Color.rgb, DestinationColor.rgb, texture0Color.a);
gl_FragColor.a = texture0Color.a * DestinationColor.a;
}
这个shader给了我下面的:
对不起,但您的问题对我来说有点不清楚。你需要的结果究竟是什么?你是否也在ES 2.0中使用混合? – Reigertje
如果不清楚,我表示歉意。是的,我以同样的方式启用了ES 2.0中的混合。我基本上需要与ES 1.0中相同的结果,但不能清楚地描述它。尽管我试图描述如何在ES 1.0中进行设置。这可能是不够的...... – user1727274
我认为这个问题现在应该更清晰 – user1727274