Sprite Opacity с использованием OpenGL ES 2.0 на Android

Я пытаюсь, чтобы мои точечные спрайты отображались с правильной непрозрачностью.

Первоначально я получал текстуру спрайта на черном квадрате.

Итак, я добавил следующее в мой фрагментный шейдер:

"if(color.a < 0.5) "+
               "discard;"+

Теперь, похоже, это работает, так как мой спрайт отображается без черного фона, однако сама моя текстура "частично прозрачна" - и она не показывает эту частичную прозрачность, она выглядит сплошной. Это немного сложно объяснить, но я надеюсь, вы понимаете, о чем я. Если я рисую ту же текстуру, используя холст / вид поверхности, она отображается правильно.

По сути, я пытаюсь заставить свои текстуры отображаться в их оригинальном формате (то есть, как они делают в программном обеспечении, в котором они были созданы - т.е. Gimp / photoshop и т. Д.).

Буду признателен за любую помощь - спасибо

1 ответ

Решение

Сначала убедитесь, что ваши текстуры загружаются из прозрачных PNG через Bitmap либо с RGBA_8888 или же RGBA_4444 конфигурации, так что вы не потеряете альфа-канал.

Во-вторых, вам нужно включить GL_BLEND с glEnable() команда. На Android вы напишите это так: GLES20.glEnable(GLES20.GL_BLEND);, Это позволяет смешивать уже нарисованный цвет с новым цветом, получая прозрачный вид. Функция смешивания должна быть установлена ​​на GL_ONE, GL_ONE_MINUS_ALPHA для регулярной прозрачности: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);GL_SRC_ALPHA, GL_ONE_MINUS_ALPHA для регулярной прозрачности: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Наконец, вам не нужно использовать сброс, просто установите gl_FragColor в 4-компонентный вектор с альфа-каналом в четвертом канале (это то, что вы получаете при чтении текстуры из сэмплера), например, вы можете просто сделать gl_FragColor = texture2D(sampler, texCoord); если бы ты хотел.

Скорее всего, вам придется отключить проверку глубины с помощью glDisable(GL_DEPTH_TEST) чтобы избежать проблем с несортированными треугольниками.

Вы можете прочитать немного больше о прозрачности здесь.

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