Альфа-смешение с OpenGL ES 2.0? - PullRequest
2 голосов
/ 25 сентября 2010

Какой лучший способ?

Я пытался сделать это наивно с помощью фрагментного шейдера, который выглядит так:

varying lowp vec4 color;
void main()
{
    lowp vec4 alpha = colorVarying.wwww;
    const lowp vec4 one = vec4(1.0, 1.0, 1.0, 1.0);
    lowp vec4 oneMinusAlpha = one-alpha;
    gl_FragColor = gl_FragColor*oneMinusAlpha + colorVarying*alpha;
    gl_FragColor.w = 1.0;
}

Но это не работает, потому что кажется, что gl_FragColor не содержит ничего значимого до запуска шейдера.

Какой правильный подход?

1 Ответ

7 голосов
/ 25 сентября 2010

Альфа-смешение сделано для вас. При выходе из шейдера gl_FragColor должен содержать альфа-значение в компоненте w, и вы должны установить режим смешивания с помощью обычного API, как будто шейдера вообще нет. Например, gl_FragColor = vec4(0,1,0,0.5) приведет к прозрачному зеленому фрагменту на 50%.

...