2014-01-12 2 views
1

Я поставил glBlendFunc вOpenGL ES 2.0 смешивания

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

и для целей тестирования я установить цвет в моем пиксельный шейдер как этот

gl_FragColor = vec4(1.0,0.0,0.0,0.0); 

Не следует ли объект быть полностью прозрачным? Что может быть причиной, если это не так?

ответ

2

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

+0

очень полезно описание, спасибо! – cboe