我正在開發一款遊戲並添加了着色器,該着色器會將每一個東西都變成灰度,然後變成黑色。着色器本身工作正常,但是當它啓動時,Spritebatch和Sprites的一些功能停止工作。顏色的變化被忽略,任何事物的阿爾法總是1.當默認着色器使用這些方法通常是負責哪些工作非常良好的圖形變化:LibGDX Shader停用重要的SpriteBatch方法
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);
}
我認爲你沒有自己寫着色器? – Tenfour04
我在教程的幫助下編寫了這兩個代碼,並修改了許多片段着色器以使其適合我的遊戲。頂點着色器大多是相同的 –
好吧,只是好奇。這聽起來像一個光滑的效果。 – Tenfour04