Смешивание OpenGL ES 2.0
Я установил glBlendFunc на
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
и для целей тестирования я установил цвет в моем фрагменте шейдера, как это
gl_FragColor = vec4(1.0,0.0,0.0,0.0);
Разве объект не должен быть полностью прозрачным? Что может быть причиной, если это не так?
1 ответ
Решение
Первый аргумент glBlendFunc()
является исходным фактором, второй является целевым фактором. В твоем случае:
sfactor = 1.0;
dfactor = 1.0 - src.alpha;
являющийся src.alpha = 0.0
, от твоего gl_FragColor
:
sfactor = 1.0;
dfactor = 1.0;
Таким образом, цвет, помещенный в буфер, будет:
buffer = sfactor * src + dfactor * dst;
Подставляя...
buffer = (1.0,0.0,0.0,0.0) + dst;
Итак, проще говоря, вы добавляете 1 к красному каналу существующего буфера.
Если вы хотите сделать вывод полностью прозрачным, обычная функция:
glBlendFunc(GL_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Тот, который вы написали, обычно используется для предварительно умноженной альфы в источнике. Но (1, 0, 0, 0) явно не является предварительно умноженным альфа-значением!