Painter's Algorithm 画家算法
起源于油画绘制方式,从后往前,依次覆盖后面的物体
需要对不同深度的物体进行分类来确定面与面的绘制顺序,复杂度为$O(n\log n)$,其中n为三角形的个数,也存在一个无法解决的问题,不能处理无法确定绘制顺序的物体,例如下图互相遮挡的情况
Z-Buffer
主要思想
- 对于每一个采样点或像素存储一个最小的z值(深度值)
- 存储方式与frame buffer存储颜色值的方式相同,在depth buffer里存储深度值
出于简化考虑,我们通常认为z值始终是正数,这意味着越小的值代表采样点或像素距离相机越近,越大的值则代表距离越远
Z-Buffer会在生成渲染图的同时根据各采样点(像素)的深度值生成深度图,颜色越深代表距离越近,越浅则越远
算法
初始化depth buffer的所有值为$\infty$
在光栅化的流程中增加如下伪代码流程
|
|
整体算法流程会形成如下图效果,复杂度为O(n),n为三角形面的数量