Какой режим наложения мне нужен, чтобы сделать изображения более прозрачными, нарисовав поверх них прозрачные изображения?

Эта картинка объясняет, к чему я стремлюсь:

Какой режим наложения мне нужен, чтобы сделать изображения более прозрачными, нарисовав поверх них прозрачные изображения?

По сути, у меня есть фреймбуфер, и я хочу сделать его содержимое более прозрачным, нарисовав поверх него полноэкранную форму. Цвет этой формы не будет играть никакой роли. Я пробовал это, используя следующий код:

// sr is ShapeRenderer
// fbo is FrameBufferObject

fbo.begin();

Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
Gdx.gl.glEnable(GL20.GL_BLEND);

sr.begin(ShapeRenderer.ShapeType.Filled);

Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
sr.setColor(1, 1, 1, 1);
sr.circle(0, 0, 1);

Gdx.gl.glBlendFuncSeparate(GL20.GL_ZERO, GL20.GL_ONE, GL20.GL_ZERO, GL20.GL_ONE_MINUS_SRC_ALPHA);
sr.setColor(0, 0, 0, .5f);
sr.rect(0, 0, width, height);

sr.end();
fbo.end();

Вместо того, чтобы это работало, я получаю прозрачный черный круг, который становится все более прозрачным, даже если буфер не обновляется. Чего я ожидал, так это прозрачного белого круга.

Я ожидал, что это смешение произойдет:

R = Rsrc * 0 + Rdst * 1
G = Gsrc * 0 + Gdst * 1
B = Bsrc * 0 + Bdst * 1
A = Asrc * 0 + Adst * (1 - 0.5)

Кто-нибудь знает, как заставить это работать правильно?

Если кому интересно: я пытался создать тропу, которая постепенно расчищается.

A. Person 27.07.2019 19:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ShapeRenderer не знает, что вы меняете функцию смешивания, поэтому вы рисуете и круг, и квадрат с помощью второй функции смешивания, которую вы установили. Между ними нужно смывать.

Это сделало это для меня! Я не знал, что это так работает. Теперь я использую буфер кадра, который не очищается, потому что фон также становится более прозрачным, если рисовать поверх него с помощью моей техники.

A. Person 27.07.2019 19:12

Другие вопросы по теме