大家可能会想:OpenGL里面有混合操作,混合可以实现半透明,自然也可以通过设定实现全透明。片元最后也有个Alpha测试,它也能够实现透明效果。那么这二者有没有什么区别了。
实际上,Alpha测试可以实现的效果几乎都可以通过OpenGL混合功能来实现。
那么为什么还需要一个Alpha测试呢?
答案就是,这与性能相关。Alpha测试只要简单的比较大小就可以得到最终结果,而混合操作一般需要进行乘法运算,性能有所下降。另外,OpenGL测试的顺序是:剪裁测试、Alpha测试、模板测试、深度测试。如果某项测试不通过,则不会进行下一步,而只有所有测试都通过的情况下才会执行混合操作。因此,在使用Alpha测试的情况下,透明的像素就不需要经过模板测试和深度测试了;而如果使用混合操作,即使透明的像素也需要进行模板测试和深度测试,性能会有所下降。还有一点:对于那些“透明”的像素来说,如果使用Alpha测试,则“透明”的像素不会通过测试,因此像素的深度值不会被修改;而使用混合操作时,虽然像素的颜色没有被修改,但它的深度值则有可能被修改掉了。