OpenGLES смешивание частиц, но не фон - PullRequest
7 голосов
/ 14 марта 2011

У меня следующий процесс:

 - draw background
 - draw objects and blend with background (1)GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA
 - draw particle effect with blending (2)GL10.GL_SRC_ALPHA, GL10.GL_ONE in order to highlight overlapping particles

Проблема - когда я рисую частицы, они дополнительно смешиваются с фоном и становятся очень яркими.

Мне просто нужно смешать частицы с (2) и затем все вместе смешать с фоном, используя (1).

Не рабочие решения:

  • Эффект рисования на текстуру, а затем его применение работает нормально ... но очень медленно.
  • Сначала рисуем эффект частицы, а затем фон, все выглядит нормально ... но я не могу нарисовать объект сцены, потому что они должны находиться между bg и эффектом

Вот экран дляпоказать разницу.Справа - желаемый результат, слева - частицы, смешанные с фоном.

img:

enter image description here

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

Последние обновления: Мне удалось получить нужный мне цвет ... но ... (кажется, это никуда меня не приведет) Я отрисовал фон с альфа = 0 и затем использовал функцию blend изGL11Ext: glBlendFuncSeparate (GL10.GL_SRC_ALPHA, GL10.GL_DST_ALPHA, GL10.GL_ONE, GL10.GL_ONE);

GL10.GL_SRC_ALPHA, GL10.GL_DST_ALPHA, теперь только цвета имеют b (если они имеют b, то у них есть альфа-цвета (у них есть b, если они имеют b, у которых есть альфа-цвета)

GL10.GL_ONE, GL10.GL_ONE - для всех записанных частиц установлено максимальное значение альфа-канала, имитирующее аддитивное смешивание

enter image description here

Как вы можете видеть, работает нормально.... за исключением области заливки черного цвета, где изображение частиц имеет альфа 0 ... и что плохо, что в результате изображение черного цвета имеет альфа 1, поэтому я не могу его заменить каким-либо образом ...

EDIT_2 Общая проблема простыми словами: мне нужно нарисоватькрасный (0xff0000) светящийся эффект (аддитивное смешение).На черном фоне это нормально, но если бы я взял зеленый (0x00ff00), то результирующий цвет был бы близок к 0xffff00

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

GL10.GL_SRC_ALPHA, GL10.GL_ONE для выделения перекрывающихся частиц

Нет другого способа, кроме смешивания добавок, чтобы избежать необходимости сортировки частиц.Если вы все еще хотите придерживаться этого, чтобы избежать наложения частиц, я предлагаю вам добавить контроллер рендеринга в рендеринг, чтобы вы могли уменьшить яркость визуализируемых частиц или уменьшить яркость текстуры частиц.

1 голос
/ 18 марта 2011

Вы можете использовать glAlphaFunc (GL_GREATER, 0) , чтобы отклонить фрагменты alpha = 0 от частиц.Не забудьте сначала glEnable (GL_ALPHA_TEST) .

0 голосов
/ 25 марта 2011

Будет ли работать рендеринг в отдельный буфер кадров?Вы добавляете смесь всех ваших частиц в полностью прозрачный буфер кадров, а затем делаете нормальное альфа-смешивание этого кадра

...