В приложении для рисования, которое я разрабатываю, я хочу, чтобы мой пользователь мог рисовать прозрачной кистью, например черная краска на белом фоне должна приводить к серому цвету. Когда будет нанесено больше краски, полученный цвет будет ближе к черному.Превосходное смешение OpenGL
Однако независимо от того, сколько раз я рисую над местом, результирующий цвет никогда не turnts черный; на самом деле он перестает меняться после нескольких строк. Фотошоп говорит, что альфа blob, нарисованная слева в OpenGL, составляет максимум 0,8, где я ожидаю, что она будет равна 1.
Мое приложение работает, рисуя серии марок, как в примере Apple GLPaint, чтобы сформировать линию. Штампы смешивают со следующей функцией:
glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_ONE);
glBlendEquation(GL_FUNC_ADD);
Мой пиксельный шейдер:
uniform lowp sampler2D u_texture;
varying highp vec4 f_color;
void main(){
gl_FragColor = texture2D(u_texture, gl_PointCoord).aaaa*f_color*vec4(f_color.aaa, 1);
}
Как следует настроить смешивание, чтобы получить полный цвет при рисовании несколько раз?
Update 07/11/2013
Возможно, я должен также отметить, что я первый притягивать к текстуре, а затем нарисовать текстуру на экране. Текстура генерируется с помощью следующего кода:
glGenFramebuffers(1, &textureFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, textureFramebuffer);
glGenTextures(1, &drawingTexture);
glBindTexture(GL_TEXTURE_2D, drawingTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pixelWidth, pixelHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
Update 02/12/2013 Я попытался модифицировать программу GLPaint Apple, чтобы и оказалось, что такое поведение наблюдается только на iOS7. Как видно на скриншотах ниже, цвета на iOS 7 немного бледнеют и не смешиваются красиво.
GL_ONE, GL_ONE_MINUS_SRC_ALPHA
blend функция хорошо подходит для iOS6. Может ли это быть вызвано реализацией iOS7 CALAyer или чем-то еще и как его решить?
Update 10/07/2014
компании Apple недавно обновила свой GLPaint образец для iOS7 и проблема наблюдается там, тоже. Я сделал отдельную тему на основе их кода: Unmodified iOS7 Apple GLPaint example blending issue
Вы пробовали использовать сэмплер с более высокой точностью? Если я не ошибаюсь, 'mediump' является объявлением по умолчанию для униформы семплера. –
@ AndonM.Coleman Я просто пробовал как средние, так и высокие, без эффекта. Я думаю, для этого приложения достаточно низкого уровня. – Hristo
Это именно то, что я вижу (или очень похоже). Вы нашли какое-либо решение или достигли какого-либо прогресса?SktetchBookX для iPhone делает именно то, что я хочу. –