据我的老师说,在某些情况下,Z-buffer 算法需要画家算法才能在 2D 图像中渲染 3D 场景。
我认为 Z 缓冲区算法是一种扩展,是画家算法的增强:对我来说,Z 缓冲区算法可以做画家能做的所有事情,甚至更多(多边形的交集和循环重叠)。
但是,在某些情况下,如果不使用painter's one,Z-buffer 算法将无法正常工作......这些情况是什么?
我能想象的唯一情况是使用透明度时,因为当使用的透明度方法需要排序时,Z-Buffer 不起作用。想象一下已经绘制了一个前期图元并且已经填充了 Z 缓冲区,那么稍后绘制的图元将被跳过。绘制排序后,您可以从后向前绘制。
来自维基的至少一个原因
该算法的这些和其他缺陷导致了 Z-buffer 技术的发展,这可以被视为画家算法的发展,通过逐个像素地解决深度冲突,减少了对基于深度的需求渲染顺序。即使在这样的系统中,有时也会使用画家算法的变体。由于 Z 缓冲区实现通常依赖于硬件中实现的固定精度深度缓冲区寄存器,因此存在由于舍入误差而导致的可见性问题。这些是多边形之间接缝处的重叠或间隙。为了避免这种情况,一些图形引擎实现“过度渲染”,按照画家算法给出的顺序绘制两个多边形的受影响边缘。这意味着某些像素实际上被绘制了两次(就像在完整的画家算法中一样),但这只会发生在图像的一小部分上,并且对性能的影响可以忽略不计。