OpenGL ES 2.0 альфа-смешивания
Я использую следующее, чтобы включить альфа-смешивание
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Прозрачность берется из текстуры, которая, кажется, работает, используя самые простые фрагментные шейдеры:
void main(void) {
gl_FragColor = texture2D(texture, texCoordOut);
}
Хотя он хорошо сочетается с цветом фона, он не работает с другими объектами, использующими такое же альфа-смешивание. Я не знаю, как это объяснить, так что вот картинка:
Что я делаю неправильно?
1 ответ
В вашем коде нет ничего плохого. Я думаю, вероятно, порядок, в котором вы рисуете каждое изображение, имеет значение. Например, если вы рисуете изображения в следующем порядке BGImage,image1, image2 и так далее.
Что делает opengl, так это принимает ваш порядок вызовов для смешивания изображений. После отрисовки BGImage в кадровом буфере, затем он смешивает изображения 1 и кадровый буфер, а затем снова выводит результат в кадровый буфер. Затем он смешивает image2 и framebuffer, затем снова рисует результат в framebuffer и так далее.
Таким образом, если image1 перекрывает image2, image1 смешивается с BGimage, а не с image2.