我现在有一个默认的精灵批:libgdx - 如何设置sprite批量混合/阴影像这样?
batch = new SpriteBatch();
我读过有关使用着色器来修改该批次如何绘制每个精灵。在我的游戏中,我尝试创建“夜间”效果 - 我希望屏幕上的每个像素都是黑色的,除了已经是白色的像素。对于白色像素,我想要一个蓝色阴影。很明显,我是libgdx和openGL的新手 - 任何熟悉混合或着色器的人都可以帮我解决这个问题吗?我应该怎样对待我的精灵来达到我所描述的效果?
我现在有一个默认的精灵批:libgdx - 如何设置sprite批量混合/阴影像这样?
batch = new SpriteBatch();
我读过有关使用着色器来修改该批次如何绘制每个精灵。在我的游戏中,我尝试创建“夜间”效果 - 我希望屏幕上的每个像素都是黑色的,除了已经是白色的像素。对于白色像素,我想要一个蓝色阴影。很明显,我是libgdx和openGL的新手 - 任何熟悉混合或着色器的人都可以帮我解决这个问题吗?我应该怎样对待我的精灵来达到我所描述的效果?
影响,你想实现可以用这样的事情来完成。
的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。
说实话,它(几乎)没有任何共同点SpriteBatch - 所有你用它做的只是采用创建着色器
batch.setShader(ShaderProgram shader)
着色器的话题是非常非常宽(和说实话独立于Libgdx),没有关于它应该做什么的信息,你的问题没有简单的答案。另外 - 说实话 - 首先尝试阅读一些关于着色器的内容,然后再回过头来看看,当你遇到麻烦时。
您可以在这里开始:
怎么样batch.setBlendFunction()?能以任何方式帮助我吗? – SheerSt
不是 - 它是关于颜色混合 - 定义透明颜色应该如何混合以使其成为其他人的总和 –
太棒了!感谢给我一个出发点。 – SheerSt