2016-04-19 7 views
-1

Я ищу функцию/способ сделать смешивая работу только тогда, когда пикселы назначения (т.е. обратно буфер) альфа-значение больше 0.OPENGL, смешайте только тогда, когда конечное изображение альфа-значение является положительным

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

Любые идеи?

Вы заранее заблаговременно

ps. Я не могу выполнить пиксельно-пиксельный тест в функции рисования, потому что он задан как функция обратного вызова для пользователя.

+0

Вы пробовали 'glBendFunc'? – Matso

+0

Определите «* make blending work» *. У вас уже есть функция смешивания? То есть, вы комбинируете цвета источника и назначения, или просто хотите условно написать исходный цвет, исходя из того, является ли целевая альфа больше нуля? –

+0

Я пытаюсь достичь второго, чтобы условно написать цвет источника, исходя из того, является ли целевая альфа больше нуля. То, что я пытаюсь сделать, это сохранить буфер обратно на различные текстуры и по требованию перерисовать их поверх заднего буфера (который, скорее всего, будет перерисован с помощью чего-то другого) с помощью функции blend (GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA). – aftos

ответ

-1

Извините за это, но я думаю, что лучше отвечать, а не комментировать.

Итак, позвольте мне лучше объяснить пример.

Предположим, что нам нужно нарисовать что-либо (независимо от того, что хочет пользователь, как таблица), и после этого (перед тем, как менять буфер, конечно) мы должны нарисовать над ним «сохраненные» текстуры с использованием смешивания.

Предположим, мы должны нарисовать два прозрачных короба. Если эти коробки должны быть сохранены в различной текстуре, это может быть сделано:

  1. Очистить экран с (0, 0, 0, 0) функция
  2. набора смеси (GL_ONE, GL_ZERO)
  3. нарисовать коробку
  4. сохранить в текстуре.

Теперь, когда пользователь хочет, чтобы перерисовать их всех, он просто рисует главную тему (таблица) и над ней рисует текстуры, используя функцию смешивания (GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA).

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

Подводя итог, итоговое изображение всей картины должно быть таблицей с двумя коробками (скажем, желтой и зеленой коробкой) над ней, смешанной с функцией (GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA).