Я пытаюсь объединить два круга, один черный и другой белый. Части, где они пересекаются, должны быть серого. Я попытался использовать функции смешивания, но я не получаю ожидаемых результатов.Как смешивать два цвета текстур в Libgdx
Цель состоит в том, чтобы смешивать ТОЛЬКО эти два элемента, другие элементы (например, фон) не могут перемещаться там, и я не знаю, как это сделать, поддерживая 100% альфа-канала.
Это мой текущий код визуализации, circle1 и circle2 - TextureRegion.
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
batch.enableBlending();
batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ONE);
batch.draw(circle1, c1.getX(), getY(), getWidth(), getHeight());
batch.draw(circle2, c2.getX(), getY(), getWidth(), getHeight());
}
Это пример цветовой смеси.
EDIT: проблема решена. Я сделал тест с помощью SpriteBatch, я нарисовал третий круг с пониженной непрозрачностью, это код, который используется для тестирования и результат:
Gdx.gl20.glEnable(GL20.GL_BLEND);
Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(1, 1, 1, 1f);
shapeRenderer.circle(15, 5, 5);
shapeRenderer.setColor(0, 0, 0, 1f);
shapeRenderer.circle(19, 5,5);
shapeRenderer.setColor(1, 1, 1, 0.5f);
shapeRenderer.circle(15, 5, 5);
shapeRenderer.end();
Gdx.gl20.glDisable(GL20.GL_BLEND);
Похоже, вы хотели другую смесь между верхней окружностью и нижней окружностью, чем у вас есть между верхней окружностью и фиолетовым фоном. Самый простой способ, который я могу придумать для этого, - снова нарисовать первый круг после второго круга, но с уменьшенной непрозрачностью. И сохраните функцию смешивания по умолчанию GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. – Tenfour04
Это решило мою проблему! Я отредактировал сообщение с помощью решения – Draelach