Z-buffering(缓冲)

先渲染后面的物体,后渲染前方的物体,前方的物体覆盖后方的物体——画家算法(Painter Algorithm)

将需要光栅化的三角形进行深度排序,此时的时间复杂度是O(nlogn)

But 会出现在这样的问题,出现一下的情况

Untitled

当前图片无法判断P Q R 哪一个图片在前面 自然这种算法让是不可取的


为了解决当前的问题,提出了深度缓存算法(Z-Buffering)

三角形无法进行排序,所以深度缓存算法用每个像素点进行排序

frame buffer(帧缓存)—存储结果(当前看到图片)

depth bufffer(深度缓存)—存储当前图片的深度

两个缓存同时生成

相机的坐标在原点向Z轴的负方向,因此数字越小反应距离计算机越远,数字越大反应离计算机越近

深度缓存算法过程

先将所有像素深度视为负无穷

for(each triangle T)     //遍历每一个三角形
		for(each sasmple (x,y,z) in T)    //遍历每一个三角形的下像素点
				if(z < zbuffer[x,y])       //如果当前遍历的像素点深度小于图片深度
					framebuffer[x,y] = rgb;   //则将图片深度设置为当前三角形深度
				else donothing

对于遍历三角形来说时间复杂度为O(n) ps:与顺序无关

Shading(着色)