ThreeJS 深度缓冲,深度写入,深度测试,混合

1,244 阅读1分钟

image.png image.png

gl.enable(gl.DEPTH_TEST) //开启深度测试
gl.DepthMask(false) //深度写入为fasle 不参与深度测试
gl.enable(gl.BLEND); //融合
gl.blendFunc( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA ); //不进行深度融合
depthBuffer.setMask( material.depthWrite );
setMask: function ( depthMask ) {
        if ( currentDepthMask !== depthMask && ! locked ) {
                gl.depthMask( depthMask );
                currentDepthMask = depthMask;
        }
},
  • 渲染半透明物体时,需要开启深度测试而关闭深度写入功能。是因为不写入深度的话,后面进来的模型就不用考虑半透明的深度测试了
  • 深度测试为false, 意味着drawcall的物体会不断的覆盖在上面