Смешивание OpenGL с исходной и целевой альфа - PullRequest
0 голосов
/ 28 ноября 2010

Я пытаюсь визуализировать текстуру с альфа в буфер кадров с альфа. Мне нужно, чтобы прозрачность текстуры контролировалась комбинацией ее собственной альфы, и альфа уже визуализировалась в буфер кадра.

е:

Нормальная прозрачность:

(src_colour * src_alpha) + (dst_colour * 1-src_alpha)

Требуемая прозрачность:

(src_colour * src_alpha * dst_alphe) + (dst_colour * 1- (src_alpha * dst_alpha))

Кто-нибудь может понять, как это сделать?

Я работаю над этим уже 9 часов: -)

Я использую OpenGL 1.0 с GL11ExtensionPack на Android, поэтому у меня есть доступ к glBlendFunc и glBlendFuncSeparate. Я бы предпочел не идти по пути GLES20 с шейдерами, так как для этого потребовалось бы переписать много кода.

Спасибо, Andrew

1 Ответ

1 голос
/ 30 ноября 2010

Это решение, которое я использовал:

  1. включить цветную и альфа-запись
  2. glBlendFunc (GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA)
  3. рендеринг на переднем планеобъекты
  4. отключить альфа-запись
  5. рендеринг теней
  6. рендеринг объектов, которые отбрасывают тени
  7. glBlendFunc (GL10.GL_ONE_MINUS_DST_ALPHA, GL10.GL_DST_ALPHA)
  8. рендеринг фоновых объектов

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

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

...