Вот как я рисую свою кисть в фрагментном шейдере:
gl_FragColor.rgb = Color.rgb;
gl_FragColor.a = Texture.a * Color.a;
С помощью этой функции смешивания текстуры (0, 0, 0, 0):
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Вот что я вижу, когда рисую свою текстуру ДОБАВЛЕНО на белом фоне с помощью glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA):
Но вот что я получаю в своей текстуре:
Может ли кто-нибудь помочь мне понять, почему я получил этот серый штрих в моей текстуре? Потому что мне нужно сделать скриншот этой текстуры, и я хочу иметь тот же рендеринг, но без белого фона.
Вы делаете две операции смешивания, одна в вашем шейдере, другая с помощью glBlendFunc
вызов. При визуализации непосредственно на экран не применяется glBlendFunc
однако во второй раз при рендеринге текстуры он применяется при рендеринге текстуры, а затем снова при рендеринге текстуры на экран.
У вас есть два варианта: 1) не смешивать ваш шейдер, 2) использовать другую функцию смешивания (я считаю, glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
работать хорошо). Я считаю, что вариант 2 работает лучше всего для меня, обработка функций смешивания OpenGL, как известно, раздражает.