LWGJL混合问题

时间:2016-01-20 06:15:57

标签: opengl libgdx alpha lighting

我正在尝试使用光照贴图创建这样的效果,但仅使用混合函数和渲染来执行此操作:https://www.youtube.com/watch?v=JkyGTZ0992s

基本上,当光照贴图全部为白色并且从那里消失时,让光照贴图具有100%的透明度,正如您在上面的视频中所看到的那样。

现在,它正在融合,但从图片中可以看出它非常暗(忽略星际艺术):https://gyazo.com/fa0cecbe6085db3dc15291a86396af13

这是因为我的混合模式吗?我想不出来,希望你能!谢谢!

代码:

public ShaderProgram shader;
public Texture texture;
public Sprite sprite;

public Sprite lightSprite;
public Texture lightText;
public ShapeRenderer shape;
SpriteBatch spriteBatch;

@Override
public void create() {
    shape = new ShapeRenderer();
    spriteBatch = new SpriteBatch();
    texture = new Texture(Gdx.files.internal("image.png"));
    sprite = new Sprite(texture);

    lightText = new Texture(Gdx.files.internal("light.png"));
    lightSprite = new Sprite(lightText);

    ShaderProgram.pedantic = false;
    shader = new ShaderProgram(Gdx.files.internal("shaders/passthrough.vert"), Gdx.files.internal("shaders/passthrough.frag"));
    System.out.println(shader.getLog());

    spriteBatch.setShader(shader);
}

@Override
public void render() {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    /*
    Draw image
     */
    spriteBatch.setShader(shader);
    spriteBatch.begin();
    sprite.draw(spriteBatch);


    spriteBatch.setShader(null);
    spriteBatch.setBlendFunction(GL30.GL_DST_COLOR, GL30.GL_SRC_ALPHA);
    lightSprite.draw(spriteBatch, 1.0f);
    spriteBatch.end();
    lightSprite.setPosition(Gdx.input.getX(), Gdx.input.getY());
    spriteBatch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
}

}`

我正在使用的着色器只会使屏幕变暗,这也是: VERT:http://pastebin.com/LkxCZGf6 FRAG:http://pastebin.com/dLwudnHx

光照贴图:enter image description here

0 个答案:

没有答案