Смешивание 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) явно не является предварительно умноженным альфа-значением!

Другие вопросы по тегам