OpenGL ES 2.0: рисование в FBO + текстура = серая текстура

Вот как я рисую свою кисть в фрагментном шейдере:

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):

Мой инсульт хорошо виден

Но вот что я получаю в своей текстуре:

Неправильное смешивание в текстуре

Может ли кто-нибудь помочь мне понять, почему я получил этот серый штрих в моей текстуре? Потому что мне нужно сделать скриншот этой текстуры, и я хочу иметь тот же рендеринг, но без белого фона.

  • [1-е изображение] Когда я рисую «вид», у меня белый фон
  • [2nd picture] Но я сохраняю свой штрих в текстуре, которая имеет прозрачный фон

1

Решение

Вы делаете две операции смешивания, одна в вашем шейдере, другая с помощью glBlendFunc вызов. При визуализации непосредственно на экран не применяется glBlendFunc однако во второй раз при рендеринге текстуры он применяется при рендеринге текстуры, а затем снова при рендеринге текстуры на экран.

У вас есть два варианта: 1) не смешивать ваш шейдер, 2) использовать другую функцию смешивания (я считаю, glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); работать хорошо). Я считаю, что вариант 2 работает лучше всего для меня, обработка функций смешивания OpenGL, как известно, раздражает.

0

Другие решения


По вопросам рекламы [email protected]