今天写Litchi的时候遇到了一个bug,简单来说就是半透明模型把另外一个半透明模型给遮蔽了。然后上网查了一下,找到了原因,是因为开启了深度测试。
深度测试时直接将把遮挡的半透明模型的片段给丢弃了,然后在混合阶段就没有目标片段了;
然后找到了一个解决方案即:在渲染半透明模型时,开启深度测试,但不开启深度写入,渲染不透明模型时同时开启深度测试和深度写入;
但这里还有一个问题,有的模型既有透明片段也有不透明片段,这该如何解决?可能是控制深度写入和深度测试的步骤要放到FragmentShader里了;
然后接受一下这样做的原因:
先看不同步骤之间的顺序:
先化简模型:渲染模型但是半透明和都是不透明:
这两者在深度测试上是两个极端,前者中,深度测试没有意义,后者中深度测试是具体意义的;
因为前者中每一个片段都能对一个像素产生影响,后者中只有距离相机最近的片段能产生影响。
然后仔细想想就行了,哎,人大脑中的想法真的很难全部写出来,是我水平问题;