首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebGL alpha混合

WebGL alpha混合
EN

Stack Overflow用户
提问于 2016-11-17 09:40:59
回答 1查看 1.5K关注 0票数 2

我正在尝试将一个纹理叠加到另一个纹理上,但我在边缘周围遇到了alpha混合问题。我尝试了许多混合组合,但都没有成功。我哪里错了?

帧缓冲区的当前状态(不透明):

在屏幕外帧缓冲区中渲染的透明纹理:

当我尝试将两者混合时,结果。请注意圆上的边:

下面是blendFunc:

代码语言:javascript
复制
_gl.blendFuncSeparate( _gl.SRC_ALPHA, _gl.ONE_MINUS_SRC_ALPHA, _gl.ONE, _gl.ONE_MINUS_SRC_ALPHA );

这是着色器。只是纹理的基本渲染:

代码语言:javascript
复制
uniform sampler2D texture;
varying vec2 vUv;

void main() {
    vec4 tColor = texture2D(texture, vUv);

    gl_FragColor = tColor;
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-18 10:50:47

你的纹理最有可能使用的是预乘的alpha,所以你的混合函数应该是

代码语言:javascript
复制
_gl.blendFunc(_gl.ONE, _gl.ONE_MINUS_SRC_ALPHA);

如果你的纹理没有被预乘,你可能需要在你的着色器中预乘它们

代码语言:javascript
复制
gl_FragColor.rgb *= gl_FragColor.a

或者,当您加载它们时(在调用gl.texImage2D之前),您可以告诉浏览器将它们预乘

代码语言:javascript
复制
_gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);

This document probably explains the issues better

你可能会发现这也是相关的

WebGL: How to correctly blend alpha channel png

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40645356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档