我正在尝试使用光照贴图创建这样的效果,但仅使用混合函数和渲染来执行此操作: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