【发布时间】:2015-03-27 17:28:16
【问题描述】:
在 Libgdx 1.x Stage 中,我的目标是在我的屏幕上应用一个深色半透明蒙版,除了应该显示原始屏幕的区域。
我的全局渲染方法:
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setShader(null);
update();
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
batch.begin();
darkener.draw(batch, 0.7f);
spotlight.draw(batch, 1f);
batch.end();
}
Darkener 和 Spotlight 对象的两个实例都是由纯白色 4x4 纹理制成的 Sprite:
spotlight = new Sprite(new Texture(Gdx.files.internal("data/ui/whitepixel.png")));
darkener = new Sprite(new Texture(Gdx.files.internal("data/ui/whitepixel.png")));
我将 Darkener 对象设置为屏幕大小,将 Spotlight 对象设置为我不想变暗的区域大小。
这是我的对象变暗器的绘制方法:
public void draw(Batch batch, float alpha) {
darkener.draw(batch, alpha);
}
还有我的 Spotlight 对象的 draw 方法:
public void draw(Batch batch, float alpha) {
batch.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA);
spotlight.draw(batch, alpha);
batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
}
我的问题是关于混合: 带参数:
darkener.draw(batch, 0.7f);
spotlight.draw(batch, 1f);
保留的(聚光灯)区域比原始区域更暗。
带参数:
darkener.draw(batch, 0.3f);
spotlight.draw(batch, 1f);
保留的(聚光灯)区域比原始区域更亮(饱和)。
使用参数:
darkener.draw(batch, 0.5f);
spotlight.draw(batch, 1f);
保留的(聚光灯)区域与原始区域完全相同(所以,正如我想要的那样)。问题是我希望能够为我的 Darkener 设置不同的值 0.5f。
我做错了什么?
【问题讨论】:
标签: libgdx rendering draw alphablending