同一个场景,同时存在透明和不透明物体,存在各种遮挡关系。
正常渲染流程:渲染不透明物体时,开启深度测试和深度写入;渲染透明物体时,开启深度测试,关闭深度写入。两种状态,互相切换。
深度测试与深度写入就3种情况:(以下透明物体称为A,不透明物体称为B)
1、始终开启深度测试和深度写入(默认状态)
此时,如果A在前,B在后,深度测试时,B不能通过测试,B的像素直接被丢弃,因此B不能参与混合,也就不能实现透明效果。
2、渲染透明物体时,直接关闭深度测试(“直接关闭深度测试”与“不关闭深度测试只关闭深度写入”的区别)
此时,如果B在前,A在后,由于不进行深度测试,A和B的像素都参与混合,呈现透明效果。就是说不透明物体挡不住透明物体,渲染错误。
3、渲染透明物体时,开启深度测试,关闭深度写入
此时,如果A在前,B在后。由于A的深度没有写入,B始终可以通过深度测试,B和A可以混合,实现透明效果。如果B在前,由于A没有通过深度测试,A像素直接被丢弃,B挡住A,渲染正常。
综上,渲染透明物体时,只能开启深度测试,关闭深度写入,渲染不透明物体时,再把深度写入打开。
版权声明:本文为syb1295306116原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。