WebGL半透明物体的绘制

相关API

  • 开启混合功能:gl.enable(gl.BLEND)。
  • 指定混合函数:gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)。 //一般都是固定了的

透明和不透明物体共存

//1.开启隐藏面消除功能:
gl.enable(gl.DEPTH_TEST)。

//2.绘制所有不透明的物体(a == 1.0)

//3.锁定深度缓冲区的写入操作,使之只读 (深度缓冲区用于隐藏面消除):
gl.depthMask(false);

//4.绘制所有半透明的物体 a < 1.0,注意将物体按深度排序,a 最小最先绘制 

//5.释放深度缓冲区,使之可读可写: 
gl.depthMask(true)
复制代码
if(i < 4){ // 非透明物体
    gl.depthMask(true);
    gl.disable(gl.BLEND);
} else { //透明物体
    gl.depthMask(false);
    gl.enable(gl.BLEND);
    gl.blendFunc( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA );
}
drawBufferInfo(gl, vao);
复制代码

翻了下过去的有另外一种解决方案

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享