--- title: "Z-Buffer 深度缓存" date: 2022-05-18T14:07:33+08:00 --- ##### Painter's Algorithm 画家算法 起源于油画绘制方式,从后往前,依次覆盖后面的物体 需要对不同深度的物体进行分类来确定面与面的绘制顺序,复杂度为$O(n\log n)$,其中n为三角形的个数,也存在一个无法解决的问题,不能处理无法确定绘制顺序的物体,例如下图互相遮挡的情况 ![](../../images/unresolvable_depth_order.png) ###### Z-Buffer 主要思想 1. 对于每一个采样点或像素存储一个最小的z值(深度值) 2. 存储方式与frame buffer存储颜色值的方式相同,在depth buffer里存储深度值 出于简化考虑,我们通常认为z值始终是正数,这意味着越小的值代表采样点或像素距离相机越近,越大的值则代表距离越远 Z-Buffer会在生成渲染图的同时根据各采样点(像素)的深度值生成深度图,颜色越深代表距离越近,越浅则越远 ![](../../images/Depth_map.png) 算法 初始化depth buffer的所有值为$\infty$ 在光栅化的流程中增加如下伪代码流程 ```s for (each triangle T) for(each sample(x,y,z)in T) //循环每一个采样点,深度值在采样时确定 if(z