我的代码的结果:
![奇怪](https://istack.dev59.com/sf5Qz.webp)
问题在于,我的图像中透明的部分没有正确地与之前绘制的内容混合。我知道可以使用
if(alpha<=0){discard;}
在片段着色器中,唯一的问题在于我计划拥有大量的片段,并且不希望在移动设备上为每个片段使用if语句。
以下是与alpha和深度测试相关的我的代码:
var gl = canvas.getContext("webgl2",
{
antialias : false,
alpha : false,
premultipliedAlpha: false,
}
);
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
gl.enable(gl.DEPTH_TEST);
gl.depthFunc(gl.GREATER);
此外,我正在绘制纹理化的gl.POINTS。如果我更改两个图像在缓冲区中的绘制顺序,则问题不存在。由于它们将在程序运行时动态旋转,因此这不是一个选项。