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.

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