Html5 canvas Webgl画布在另一个画布上显示为半透明

Html5 canvas Webgl画布在另一个画布上显示为半透明,html5-canvas,webgl,Html5 Canvas,Webgl,我正在尝试为我的游戏实现webgl。问题是我使用了多个画布,而启用webgl的画布在我的地形画布上是半透明的(只绘制一次,并且只随播放器移动)。这是一张照片: 我在谷歌上搜索了两个小时,没有找到任何有用的东西 我试过: getContext("experimental-webgl",{alpha: false}); 这只是完全隐藏地形(现在全部为黑色),但我的webgl绘制的对象具有正确的颜色 gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL

我正在尝试为我的游戏实现webgl。问题是我使用了多个画布,而启用webgl的画布在我的地形画布上是半透明的(只绘制一次,并且只随播放器移动)。这是一张照片:

我在谷歌上搜索了两个小时,没有找到任何有用的东西

我试过:

getContext("experimental-webgl",{alpha: false}); 
这只是完全隐藏地形(现在全部为黑色),但我的webgl绘制的对象具有正确的颜色

gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);

gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, false);
这两种方法都没有任何明显的效果

gl.clearColor(0, 0, 0, 0)
没有影响结果,仍然像上面的截图

这里的其他一切:


似乎什么都不管用。为什么画布上画的东西是半透明的?没有CSS影响canvas元素。

解决了它!我使用的是WebGL-2D,它是一个javascript文件,将context2D API添加到WebGL。因此,如果我调用drawImage,它实际上会用webgl处理它。在getContext定义中,我必须更改:

gl.彩色掩膜(1,1,1,0)

gl.彩色掩膜(1,1,1,1)

colorMask()方法指定是否可以将红色、绿色、蓝色和alpha写入帧缓冲区


我不知道以前为什么是0。

不幸的是,它画成了透明的红色。如果没有代码,我们只能猜测,而您发布的链接指向的是您可能没有正确遵循的教程。请创建一个。你可能会自己找到解决方案,所以当你不回复时,我会假设你在创建问题时成功地找到了问题。你能链接到某个地方的图片吗?你确定源图像没有alpha吗?你的着色器是什么样子的?尝试添加
gl\u FragColor.a=1.0到着色器的末尾。找到它!我使用的是WebGL-2D,它是一个javascript文件,将context2D API添加到WebGL。因此,如果我调用drawImage,它实际上会用webgl处理它。在getContext定义中,我必须更改:gl.colorMask(1,1,1,0);至德国劳埃德船级社彩色面罩(1,1,1,1);colorMask()方法指定是否可以将红色、绿色、蓝色和alpha写入帧缓冲区。我不知道为什么以前是0。