2017-04-14 135 views
0

如何使用es 2模拟传统opengls texenv gl_replace模式? 基本上,如果纹理片段alpha是0,我想使用基元颜色。但否则不会影响片段的颜色。 我是glsl的新手,可以使用帮助。带片段着色器的GL_REPLACE?

我在Android和IVE已经得到纹理与透明度一起工作。 而我只想使用一个着色器程序。我得到了: gl_FragColor = texture2D(u_TextureUnit,v_TextureCoords); 和id喜欢给原始颜色添加颜色,只显示纹理透明的地方

回答

2

这段代码将输出顶点颜色和纹理颜色之间的混合,由纹理alpha控制,我认为它是你自找的。如果不是,请尝试更准确地描述你的输入和期望的输出是什么。

lowp vec4 vPrimitiveCol = colour_from_vertex_passed_as_varying; 
lowp vec4 vTexCol = texture2D(u_TextureUnit,v_TextureCoords); 
gl_FragColor.rgb = mix(vPrimitiveCol.rgb, vTexCol.rgb, vTexCol.a); 
gl_FragColor.a = 1.0; 
+0

真棒谢谢你!尽管我不明白,但完美的作品。完全:/ –

0

你想要的是不是GL_REPLACE这将完全替代片段颜色。这听起来更像GL_BLEND。无论如何,你可以使用GLSL混合功能效仿:

solid_color = ...; 
tex_color = texture(texture_sampler, texture_coord); 
gl_FragColor = mix(solid_color, tex_color, tex_color.a); 

请注意,我用的更近(推荐)泛型类型texture函数代替旧的texture2D功能。

+0

GL ES 2支持'texture'吗?由于OP提到这个环境 – rotoglup

+0

'texture()'是一个OpenGL ES 3特性。 – SurvivalMachine

+0

@rotoglup:这个问题已经有了很广泛的标记,因此我广泛回答并选择指出,我使用了广义形式。 – datenwolf