【发布时间】:2015-10-01 12:29:41
【问题描述】:
我正在开发一款游戏并添加了一个着色器,它会将所有内容淡化为灰度,然后变为黑色。着色器本身工作正常,但是当我启动它时,Spritebatch 和 Sprites 的某些功能停止工作。颜色变化被忽略,任何事物的 Alpha 始终为 1。这些方法通常负责图形变化,当使用默认着色器时效果非常好:
sprite.setColor(Color.RED);
sprite.setAlpha((float)lifeTime/100f);
sprite.draw(pBatch);
此代码将弹出窗口着色为红色,更改 alpha,然后绘制它。当着色器打开时,它只是绘制它,就像前两行不存在一样。
这是着色器的代码:
顶点:
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
uniform mat4 u_projTrans;
varying vec4 v_color;
varying vec2 v_texCoords;
void main() {
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
片段:
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoords;
uniform sampler2D u_texture;
uniform mat4 u_projTrans;
uniform float u_fade;
void main() {
float gray_fade = u_fade;
float dark_fade = 1;
if(u_fade >= 1){
gray_fade = 1;
dark_fade = 2-u_fade;
}
vec4 color = texture2D(u_texture, v_texCoords).rgba;
float gRed = color.r - (color.r - (0.299*color.r + 0.587*color.g + 0.114*color.b))* gray_fade;
float gGreen = color.g - (color.g - (0.299*color.r + 0.587*color.g + 0.114*color.b))* gray_fade;
float gBlue = color.b - (color.b - (0.299*color.r + 0.587*color.g + 0.114*color.b))* gray_fade;
vec3 grayscale = vec3(gRed * dark_fade, gGreen * dark_fade, gBlue * dark_fade);
gl_FragColor = vec4(grayscale, color.a);
}
【问题讨论】:
-
我认为你没有自己编写着色器?
-
我在教程的帮助下编写了这两篇文章,并对片段着色器进行了很多修改以使其适合我的游戏。顶点着色器基本相同
-
好吧,只是好奇。这听起来像一个光滑的效果。