название должно показаться несколько загадочным, но я не мог толком объяснить, есть то, что я хочу сделать, так что я нарисовал картину, чтобы визуализировать мою проблему:Могу ли я использовать glBlendFunc для OpenGL-ES, чтобы повлиять на смешение, чтобы учесть цель?
Черные части являются прозрачными (ака альфа = 0). У меня есть синий объект (слева) в фреймбуфере и хочу отобразить на нем белый растровый рисунок (средний), чтобы он выглядел как объединенное растровое изображение (справа).
Проблема в том, что если я использую стандарт glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
, отображается вся часть белого объекта. Я не хочу, чтобы он полностью перекрывал материал в framebuffer (синий), но только отображался на тех частях, где он имеет значение альфа> 0 (видно). И тогда он также должен принимать во внимание свои собственные альфа-значения (обратите внимание на дыру в белом объекте).
Возможно ли это с помощью glBlendFunc или мне нужно написать шейдер для этого?
PS: Я просмотрел документацию glBlendFunc по адресу http://www.khronos.org/opengles/documentation/opengles1_0/html/glBlendFunc.html, но я действительно никуда не схожу.
PPS: Я использую OpenGL-ES 2.0 на Android с C++, но я не думаю, что язык/платформа имеет большое значение.
Привет, спасибо за ваш ответ, и я думаю, что вы правы. Я попробовал это с glBlendFunc и glAlphaFunc, но, подумав об этом, я не думаю, что это возможно. Я не могу использовать Stencil, чтобы делать то, что я хочу, потому что это было бы излишним, но я просто написал новый шейдер и создал второй фреймбуфер, и теперь он работает. Спасибо за ваш совет. – HardCoder