масштабные коэффициенты GL_SRC_ALPHA в glBlendFunc - PullRequest
0 голосов
/ 19 февраля 2019

Веб-страница Kronos говорит, что методы наложения, указанные в GL_SRC_ALPHA, GL_ONE, etc., определяют четыре масштабных коэффициента для каждого из трех цветовых каналов плюс альфа-канал.В частности, масштабные коэффициенты для GL_SRC_ALPHA рассчитываются следующим образом:

enter image description here

Где A_s0 - альфа-значение источника, а kAвычисляется следующим образом: enter image description here, где m_c - количество соответствующих битовых плоскостей красного, зеленого, синего или альфа.

  1. Мне было интересно, что этобитовые плоскости?
  2. Почему kA вычисляется в соответствии с вышеупомянутой формулой?

Например, для меня ясно, что происходит, когда есть 1источник с GL_SRC_ALPHA и 1 пункт назначения с GL_ONE_MINUS_SRC_ALPHA, чьи коэффициенты смешения просто 1 минус вышеупомянутые значения.Если kA = 1, то смешивание - это линейная интерполяция между цветами от источника и назначения, взвешенная по их альфа-значениям, то есть alpha_s * source_color + (1-alpha_s) * destination_color. Как сюда входит КА?

1 Ответ

0 голосов
/ 19 февраля 2019

По сути, все это описывает процесс нормализации целых чисел без знака : преобразование целочисленных значений в значения с плавающей точкой в ​​диапазоне [0, 1].Эта страница написана при условии, что все рассматриваемые значения являются целыми числами.Поскольку смешивание происходит со значениями с плавающей запятой, целые числа должны быть нормализованы перед выполнением любых вычислений.

kA - это просто число битов в этом конкретном цветовом канале (то, что они называют числом «битовых плоскостей»«).Деление на kA отображает значения в целочисленном диапазоне [0, кА] в диапазон с плавающей запятой [0, 1].

Вероятно, вас смущает то, что в modern OpenGL, исходные значения не являются целыми числами .Значения, которые вы выводите из своего фрагментного шейдера, являются числами с плавающей точкой.Значения назначения в кадровом буфере могут быть числами с плавающей запятой или нормализованными целыми числами, но если они нормализованы, они сопоставляются с [0, 1] до того, как уравнение смешивания доходит до них.

По сути, эта страница никогда не была действительнообновлен, чтобы соответствовать современному OpenGL.Или даже OpenGL 2.0.Лучше игнорировать это и использовать что-то еще .

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