我正在使用一个简单的着色器在我的游戏中对每个屏幕加载执行晕影过渡效果(从此book中选取)。我在菜单屏幕中使用此过渡效果。一切都很好,除了我应用于菜单按钮的fadeIn,fadeOut动画对这个添加的着色器没有任何影响;事实上,当我使用这个着色器时,没有alpha值对屏幕上的任何actor有任何影响。
这是顶点着色器:
...
gl_Position = u_projTrans * a_position;
v_texCoord = a_texCoord0;
v_color = a_color;
片段着色器:
...
vec4 texColor = texture2D(u_texture, v_texCoord);
...
gl_FragColor = vec4(texColor.r, texColor.g, texColor.b, texColor.a);
如何修复alpha问题,以便actor使用着色器正确渲染alpha?
也许片段打击会起作用?但是如何为屏幕上的每个演员设置alpha?
uniform float ALPHA;
...
gl_FragColor = vec4(texColor.r, texColor.g, texColor.b, texColor.a * ALPHA);
答案 0 :(得分:1)
淡化动画使用顶点颜色的alpha。这被传递到SpriteBatch,它将它作为a_color
传递给顶点着色器。您的顶点着色器已将颜色作为v_color
传递给片段着色器,因此在片段着色器中,您需要将最终的Alpha乘以此渐变值:
片段着色器:
varying LOWP vec4 v_color;
//...
gl_FragColor = vec4(texColor.r, texColor.g, texColor.b, texColor.a * v_color.a);