【问题标题】:libgdx - how to set sprite batch to blend/shade like this?libgdx - 如何将精灵批处理设置为像这样混合/着色?
【发布时间】:2015-11-28 14:19:34
【问题描述】:

我目前有一个默认的精灵批次:

    batch = new SpriteBatch();

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

【问题讨论】:

    标签: java android opengl-es libgdx


    【解决方案1】:

    你想达到的效果可以用这样的东西来完成。

    顶点着色器

    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。

    【讨论】:

      【解决方案2】:

      老实说,它与 SpriteBatch (几乎)没有任何共同之处 - 你所要做的只是应用创建的着色器

          batch.setShader(ShaderProgram shader)
      

      着色器主题非常广泛(老实说独立于 Libgdx),如果没有关于它应该做什么的信息,就没有简单的答案。另外 - 老实说 - 首先尝试阅读有关着色器的内容,然后在遇到问题时再回来阅读。

      你可以从这里开始:

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

      【讨论】:

      • batch.setBlendFunction() 怎么样?这对我有什么帮助吗?
      • 不 - 它是关于颜色混合 - 定义应如何混合透明颜色以将其呈现为其他颜色的总和
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多