Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 在着色器中旋转、移动和缩放遮罩_Opengl Es_Libgdx_Shader - Fatal编程技术网

Opengl es 在着色器中旋转、移动和缩放遮罩

Opengl es 在着色器中旋转、移动和缩放遮罩,opengl-es,libgdx,shader,Opengl Es,Libgdx,Shader,我想在着色器中移动(或其他动作)遮罩。但我不知道如何在着色器中执行这些动作 我的代码: @Override public void create() { batch = new SpriteBatch(); background = new Texture(Gdx.files.internal("images/background.png")); spritebackgournd = new Sprite(background,Gdx.graphics.

我想在着色器中移动(或其他动作)遮罩。但我不知道如何在着色器中执行这些动作

我的代码:

@Override
public void create() {        
    batch = new SpriteBatch();

    background = new Texture(Gdx.files.internal("images/background.png"));
    spritebackgournd = new Sprite(background,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());

    foreground = new Texture(Gdx.files.internal("images/foreground.png"));
    mask = new Texture(Gdx.files.internal("images/mask.png"));

     spriteforegournd = new Sprite(foreground,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());        

    shader = new ShaderProgram(Gdx.files.internal("shaders/shader1.vert"), Gdx.files.internal("shaders/shader1.frag"));
}

@Override
public void render() {        


    batch.begin();
    spritebackgournd.draw(batch);
     batch.setShader(shader);
        Gdx.graphics.getGL20().glActiveTexture(GL20.GL_TEXTURE0);
        spriteforegournd.getTexture().bind(0);
        //texture.bind(0);
        shader.setUniformi("u_texture", 0);
        Gdx.graphics.getGL20().glActiveTexture(GL20.GL_TEXTURE1);
        //spritemask.getTexture().bind(1);
        mask.bind(1);
        shader.setUniformi("u_mask", 1);
        Gdx.graphics.getGL20().glActiveTexture(GL20.GL_TEXTURE0);
        spriteforegournd.draw(batch);
        batch.end();
        batch.setShader(null);


}
顶点着色器:

attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;

uniform mat4 u_projTrans;

varying vec2 v_texCoords;

void main() {
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
片段着色器:

varying vec2 v_texCoords;
uniform sampler2D u_texture;
uniform sampler2D u_mask;
uniform mat4 u_projTrans;

void main() {
vec4 texColor = texture2D(u_texture, v_texCoords);
vec4 maskColor = texture2D(u_mask, v_texCoords);

gl_FragColor = texColor * maskColor.a;
}


我希望能够在着色器中缩放、旋转和移动遮罩。我如何才能做到这一点?

最好的方法取决于您的最终目标。有很多不同的精灵需要不同方向的面具吗?或者一堆精灵共用同一个面具?@Tenfour04一个面具和一个精灵(spriteforeground)。最好的方法取决于你的最终目标。有很多不同的精灵需要不同方向的面具吗?或者一堆精灵共用同一个面具?@Tenfour04一个面具和一个精灵(spriteforeground)。