如果你在片元代码里调用了 clip 函数,那么就是开启了透明度测试,不过 clip 函数传递进参数的可以不是颜色的透明度,只要是一个 float 值就行。
提前深度测试可以把被不透明物体遮挡的片元提前舍弃掉,提高渲染的效率,但我们都知道一个片元如果通过了深度测试,默认情况下他是会向深度缓冲区写入自己的深度的,试想一下:如果开启了透明度测试的物体 B 在另一个物体 A 之前,假设物体 B 先渲染,并且假设进行了提前深度测试:
由于物体B第一个渲染,他发现深度缓冲里没有值,所以通过了提前深度测试并写入了自己的深度值,这导致后面的物体 A 在进行深度测试的时候,无法通过测试,抛弃了这部分的片元。如果物体B像一个正常的不透明物体那样渲染这没什么问题,但是问题是现在的物体B会进行透明度测试,如果物体B的一部分没有通过透明度测试,被裁剪,那么将会出现错误的现象: