Работает ли смешивание с функцией смешивания шейдера - PullRequest
1 голос
/ 17 июня 2019

Это мои функции смешивания.

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);

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

FragColor = 
    mix(texture(texture1, TexCoord), texture(texturecubeMap, ransformedR), MixValueVariables.CubeMapValue ) * 
    vec4(result, material.opacity / 100.0); // multiplying texture with material value

Несмотря на изменение типов смешивания Equation или BlendFunc, я неНе вижу никакой разницы в выводе.

Работает ли функция смешивания с типами смешивания.

1 Ответ

2 голосов
/ 17 июня 2019

Функция mix работает с типами смешивания.

Нет. Смешивание и функция glsl mix - это совершенно разные вещи.

Функция mix(x, y, a) всегда вычисляет x * (1−a) + y * a.

Смешивание берет цветовые выходные фрагменты из шейдера фрагмента и объединяет их с цветами в цветовом буфере буфера кадров.

Если вы хотите использовать Смешивание , тогда вам нужно

  • нарисовать геометрию с первой текстурой
  • активировать смешивание
  • Нарисуйте геометрию со второй текстурой

Если вы просто хотите смешать текстуры в фрагментном шейдере, то вы должны использовать арифметику glsl. См. Программирование GLSL / Векторные и матричные операции

* 1 034 *, например
vec4 MyBlend(vec4 source, vec4 dest, float alpha)
{
    return source * alpha + dest * (1.0-alpha);
}

void main()
{
    vec4 c1 = texture(texture1, TexCoord);
    vec4 c2 = texture(texturecubeMap, ransformedR);
    float f = MixValueVariables.CubeMapValue

    FragColor = MyBlend(c1, c2, f) * vec4(result, material.opacity / 100.0); 
}

Адаптируйте функцию MyBlend к вашим потребностям.

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