Ich habe Probleme mit dem libGDX FrameBuffer und Alpha. Unten sind zwei Bilder des erwarteten Ergebnisses und des tatsächlichen Ergebnisses. Kann mir bitte jemand sagen, was ich falsch mache und wie kann ich das korrigieren? Hier ist der Code:libGDX Framebuffer Alpha Probleme
FrameBuffer buffer;
Sprite sprite;
SpriteBatch batch;
Texture texture1;
Texture texture2;
Texture texture3;
Sprite texture2Sprite;
@Override
public void create() {
batch = new SpriteBatch();
texture1 = new Texture("1.png");
texture2 = new Texture("2.png");
texture3 = new Texture("3.png");
texture2Sprite = new Sprite(texture2);
texture2Sprite.setAlpha(0.5f);
texture2Sprite.setPosition(100, 100);
buffer = new FrameBuffer(Pixmap.Format.RGBA8888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
sprite = new Sprite(buffer.getColorBufferTexture());
sprite.flip(false, true);
}
public void createFBO()
{
buffer.begin();
Gdx.gl.glClearColor(0f, 0f, 0f, 0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(texture1, 0f, 0f);
texture2Sprite.draw(batch);
batch.end();
buffer.end();
}
@Override
public void render() {
createFBO();
Gdx.gl.glClearColor(0f, 0f, 1f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.enableBlending();
batch.draw(texture3, 200, 200);
sprite.draw(batch);
batch.end();
}
Hey, danke, es hat perfekt funktioniert ... Allerdings habe ich noch eine Folge. Angenommen, ich möchte etwas zum FrameBuffer zeichnen, der eine Alpha-Komponente hat, aber auch ein anderes Shader-Programm verwendet. Wie würde ich darüber gehen? – user5207217
Froh, dass es für dich funktioniert hat. Ich denke, der einzige Weg, um das nächste Problem zu lösen, besteht darin, eine andere Version Ihres anderen benutzerdefinierten Shaders zu erstellen und sie so zu modifizieren, dass sie vorvervielfachtes Alpha zeichnet. Ich stelle mir vor, die Mehrheit der Shader können Sie einfach die erforderliche Zeile am Ende hinzufügen; 'gl_FragColor.rgb * = gl_FragColor.a;' – hamham