Alpha 与 OpenGL ES 2.0 混合?

发布于 2024-09-25 01:41:41 字数 416 浏览 4 评论 0原文

最好的办法是什么?

我尝试使用如下所示的片段着色器天真地执行此操作:

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 似乎不包含任何有意义的内容。

正确的做法是什么?

What's the best way?

I tried to do this naïvely with a fragment shader that looks like this:

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;
}

But this doesn't work, because it seems gl_FragColor does not contain anything meaningful before the shader runs.

What's the correct approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一影成城 2024-10-02 01:41:41

Alpha 混合已为您完成。在着色器退出时,gl_FragColor 应将 alpha 值保存在 w 组件中,并且您必须使用普通 API 设置混合模式,就像根本没有着色器一样。例如,gl_FragColor = vec4(0,1,0,0.5) 将生成绿色、50% 透明的片段。

Alpha blending is done for you. On shader exit, gl_FragColor should hold the alpha value in w component and you have to set the blending mode with the normal API just like there is no shader at all. For example gl_FragColor = vec4(0,1,0,0.5) will result in a green, 50% transparent fragment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文