GL_REPLACE 使用片段着色器?

GL_REPLACE with a fragment shader?

如何使用 es 2 模拟旧版 opengls texenv gl_replace 模式? 基本上,如果纹理片段 alpha 为 0,我想使用基元颜色。但除此之外不影响碎片颜色。 我是 glsl 的新手,可以使用帮助。

我在 android 并且我已经获得了透明的纹理。 我只想使用一个着色器程序。我得到了什么: gl_FragColor=texture2D(u_TextureUnit,v_TextureCoords); 我喜欢给图元添加一种颜色,只在纹理透明的地方显示

此代码段将输出顶点颜色和纹理颜色之间的混合,由纹理 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;

你想要的不是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 函数。