OpenGL - воспроизведение эффекта прозрачности с черного фона на белый - PullRequest
0 голосов
/ 19 июня 2011

Моя программа использует смешивание с помощью glBlendFunc(GL_SRC_ALPHA, GL_ONE), чтобы создать приятный эффект, когда фон установлен на черный с clearColor(0,0,0,1).Когда фон установлен на белый с clearColor(1,1,1,1), экран становится пустым белым.Я не знаю, как создать такой же эффект прозрачности на белом фоне.Предложения приветствуются.

Ответы [ 2 ]

2 голосов
/ 19 июня 2011

glBlendFunc(GL_SRC_ALPHA, GL_ONE) примерно переводит в следующее уравнение (технически, зажим происходит в другом месте)

New_Framebuffer_Value :=
    New_Red   := min(1, Incoming_Red   * Incoming_Alpha + Previous_Framebuffer_Red   )
    New_Green := min(1, Incoming_Green * Incoming_Alpha + Previous_Framebuffer_Green )
    New_Blue  := min(1, Incoming_Blue  * Incoming_Alpha + Previous_Framebuffer_Blue  )

Однако, если вы установили значение while, значение Previous_Framebuffer_{Red,Green,Blue} уже равно 1,0, и поэтому все последующиебудет зажат.

Таким образом, вам нужно модулировать не только входящие фрагменты, но и предыдущие:

New_Framebuffer_Value :=
    New_Red   := min(1, Incoming_Red   * Incoming_Alpha + Previous_Framebuffer_Red   * ( 1 - Incoming_Alpha ) )
    New_Green := min(1, Incoming_Green * Incoming_Alpha + Previous_Framebuffer_Green * ( 1 - Incoming_Alpha ) )
    New_Blue  := min(1, Incoming_Blue  * Incoming_Alpha + Previous_Framebuffer_Blue  * ( 1 - Incoming_Alpha ) )

, что выполняется glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

2 голосов
/ 19 июня 2011

Здесь не так много информации, но я бы предложил попробовать glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).Это наиболее «типичный» режим смешивания для достижения альфа-смешивания.Каждое значение цвета в исходном пикселе умножается на альфа-значение исходного пикселя и добавляется к значению цвета целевого пикселя, умноженному, ну, на один минус альфа исходного пикселя.

Это будет работать так же, как в режиме наложения на черном фоне, но будет вводить правильное «количество» цвета фона, когда он смещается от черного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...