2015-09-02 31 views
0

我现在有一个默认的精灵批:libgdx - 如何设置sprite批量混合/阴影像这样?

batch = new SpriteBatch(); 

我读过有关使用着色器来修改该批次如何绘制每个精灵。在我的游戏中,我尝试创建“夜间”效果 - 我希望屏幕上的每个像素都是黑色的,除了已经是白色的像素。对于白色像素,我想要一个蓝色阴影。很明显,我是libgdx和openGL的新手 - 任何熟悉混合或着色器的人都可以帮我解决这个问题吗?我应该怎样对待我的精灵来达到我所描述的效果?

回答

1

影响,你想实现可以用这样的事情来完成。

的Vertex Shader

attribute vec4 a_position; 
attribute vec4 a_color; 
attribute vec2 a_texCoord; 
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; 
} 

片段着色器

precision mediump float; 

varying vec4 v_color; 
varying vec2 v_texCoords; 
uniform sampler2D u_texture; 
uniform mat4 u_projTrans; 

bool equals(float a, float b) { 
    return abs(a-b) < 0.0001; 
} 

bool isWhiteShade(vec4 color) { 
    return equals(color.r, color.g) && equals(color.r, color.b); 
} 

void main() { 
    vec4 color = texture2D (u_texture, v_texCoords) * v_color; 
    if(isWhiteShade(color)) { 
     color *= vec4(0, 0, 1, 1); 
    } 
    else { 
     color *= vec4(0, 0, 0, 1); 
    } 
    gl_FragColor = color; 
} 

它们添加到资产文件夹,然后作为参数传递,同时创造ShaderProgram及课程的情况下不要忘记这个着色器程序适用于你的SpriteBatch。

+0

太棒了!感谢给我一个出发点。 – SheerSt

0

说实话,它(几乎)没有任何共同点SpriteBatch - 所有你用它做的只是采用创建着色器

batch.setShader(ShaderProgram shader) 

着色器的话题是非常非常宽(和说实话独立于Libgdx),没有关于它应该做什么的信息,你的问题没有简单的答案。另外 - 说实话 - 首先尝试阅读一些关于着色器的内容,然后再回过头来看看,当你遇到麻烦时。

您可以在这里开始:

https://github.com/libgdx/libgdx/wiki/Shaders

+0

怎么样batch.setBlendFunction()?能以任何方式帮助我吗? – SheerSt

+0

不是 - 它是关于颜色混合 - 定义透明颜色应该如何混合以使其成为其他人的总和 –