原文链接:http://www.nicemxp.com/articles/28
在前面的学习中,总是用一个箱子来进行各种测试,但是在世界中如果有很多个物体,然后将物体都加入渲染列表中后,发现渲染出来的效果跟想象中的不一样。
这是因为渲染接口接受到渲染列表中的三角形面是无序的,没有顺序先后之分,总是把新收到的三角形渲染到屏幕上并覆盖到屏幕本来像素点的颜色。也许我们可以为插入到渲染列表中的三角形排序,但是如果两个三角形相互交叉互相遮盖,对于这样的情况排序还是无法解决,如图:
对于图中这种情况对于排序是无用的,因为即使排了序无论先渲染哪个三角形都会覆盖掉另一个,并不能保证真实的3d效果,可以看下面效果图:
这是很多个箱子重叠在一起,渲染出来的结果是乱乱的根本看不出先后之分,这并不是我们想要的。
z缓存算法可以解决这个问题,算法基于像素进行z排序。
对于一个大小为MxN的屏幕,创建一个z缓存zbuffer[M][N],其中包含每个多边形中每个像素被光栅化扫描转换后的z值。
算法的思路&