zbuffer储存的只是比较值,写入与否决定后续的物体不决定当前的物体(ps后续可以覆盖以前的)。
最后决定显示的是cbuffer的值,ztest通过才能写入cbuffer和zbuffer
以下主要是写给自己理解:写入-修改zbuffer值,渲染-修改cbuffer值
p1:顺序蓝-绿-红。ztest通过条件是<=,背景的zbuffer是无穷大,蓝色的值比背景小,写入zbuffer且渲染;绿色的重叠部分zbuffer比蓝色的大,不通过不写入不渲染;红色同理
p2:顺序蓝-绿-红。蓝色zwrite关闭,蓝色写入cbuffer蓝色部分的zbuffer值不变(即背景的无穷大),再渲染绿色。此时绿色zbuffer与无穷大比较是小于(即通过),绿色的全部写入和渲染
p3:顺序蓝-绿-红。绿色ztest always,即蓝色写入后,渲染绿色的时候,绿色不比较zbuffer值,而是直接把其全部写入zbuffer和cbuffer,就把蓝色重叠部分覆盖了
p4:顺序蓝-绿-红。绿色和红色的ztest always。即蓝色渲染完后,绿色不比较zbuffer值,全部写入全部渲染;绿色渲染完后,红色不比较zbuffer值,全部写入全部渲染。
p5:在p5的always基础上,绿色队列加1,即顺序变为:蓝-红-绿
p6:顺序蓝-绿-红。蓝色写入且渲染后,轮到绿色,绿色通过条件是大于等于,他与蓝色重叠部分相比zbuffer值大,与背景比zbuffer小,所以只显示与写入zbuffer蓝色重叠部分。再到红色渲染,小于等于才通过。