自制简易的软光栅渲染器(4)
playerzhou
无回复
项目地址:https://github.com/OmegaZhou/SimpleRenderer
Z-Buffer
- 接下来就是要解决三角形的重叠问题了,显然对于一个三维的图像来说,要显示在二维平面上,必然有部分图像会被其他图像重叠,显然,我们能看到的图像必然是离我们最近的图像
- 这里我们先假设我们是正对XOY平面的,且离屏幕无穷远,我们引入一个数组Z-Buffer,它的每一项与屏幕上的每一个像素点一一对应,对于像素点(x,y)来说,Z-Buffer保存的值就是横纵坐标为(x,y)的所有点中离我们最近的点的z值
- 这样我们在绘制三角形内的每一个像素点时,都要先比较对应z-buffer项的值,若离我们更近,则更新z-buffer以及图像对应像素的颜色
- 在增加了z-buffer后,再绘制tiny renderer教程中提供的人像模型,则绘制出以下图形
- 这里由于我按照习惯,继续采用左手坐标系,因此z值越小,则代表越近,因此与tiny render绘制的人像方向相反,这时,只需在传入三角形坐标时对z值取反,即可得到正面人像
来一发吐槽