LibGDX - Спрайты для текстурирования с использованием FBO

Я работаю над простым приложением для рисования, используя LibGDX, и у меня возникают проблемы с тем, чтобы заставить его правильно «рисовать» с настройкой, которую я использую. Я пытаюсь сделать это, рисуя спрайтами и добавляя эти отдельные спрайты в фоновую текстуру, используя команды FBO LibGDX, когда это уместно.

Проблема, с которой я столкнулся, связана со смешиванием: когда спрайты добавляются к этой текстуре, которую я создаю, любые прозрачные пиксели спрайта, которые находятся поверх пикселей, которые были нарисованы на предыдущих, будут существенно ярче, что явно выглядит не очень. Ниже показано, как выглядит результат при использовании круга с зеленым > красным градиентом в качестве «кисти». Верхний ряд теперь является частью фоновой текстуры, в то время как нижний по-прежнему представляет собой чисто отрисованную форму спрайта.

http://i238.photobucket.com/albums/ff307/Muriako/hmm.png

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

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


person Cyanide    schedule 31.07.2012    source источник


Ответы (1)


В каком порядке вы рисуете спрайты? Альфа-смешивание работает только с пикселями, уже находящимися в мишени, поэтому вам нужно отрисовывать все элементы, содержащие альфа-канал (и все, что «за» ними) по оси Z, чтобы получить правильный результат. Я использую .glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

person P.T.    schedule 31.07.2012
comment
Спрайты отрисовываются в том же порядке, в котором они располагаются внизу, поэтому они всегда находятся поверх всех, которые были добавлены до него. Я сделал небольшую ошибку в своем исходном сообщении, которую сейчас исправил, но я использовал GL_ONE, GL_ONE_MINUS_SRC_ALPHA, чтобы получить эффект, показанный на скриншоте. Используя тот же режим наложения, который вы предложили, я получил эффект, о котором я упоминал в исходном посте, хотя ранее он был неправильным. Извините за путаницу, которая могла возникнуть! - person Cyanide; 01.08.2012