前言
在项目中遇到透明物体融合(blender)问题(如下图),原因是处于后边的透明如果在后绘制的情况下,会被深度测试无情的丢弃,因此重新梳理了一下深度测试和融合关系。用我自己的表述方式总结了此技术博文。
要点分析
-
深度测试(Depth testing)
深度测试是在片段着色器之后进行的,当深度测试开启后,OpenGL会将片段存储的深度值与深度缓存Depth Buffer)存储的值进行对比,根据规则进行深度测试,如果测试通过,那么此片段的深度值将会保存在深度缓冲中,代替原来的深度值。如果深度测试失败了,该片段将会被丢弃。 -
融合(Blending)
融合在深度测试之后进行,可以说针对的是透明物体,融合可以透过透明物体看到后边的物体,具体算法不在本文中具体分析。 -
多物体通过深度测试融合四种情况分析
背景:大方块和小方块处于坐标(0,0,0)
绘制顺序:透明大方块物体 不透明小方块
绘制顺序: 不透明小方块 透明大方块物体