代码来自:https://github.com/praveen1496/Z-Buffer
实现 z-buffer 算法,其中每个多边形应该有不同的常量着色。
a) 来自指定文件的多边形对象的几何数据
b) 查看参数
移除隐藏表面的几个对象的彩色视图。
在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,简称为消隐。
要绘制出意义明确地、富有真实感的立体图形,首先必须消去形体中不可见的部分,而只在图形中表现可见部分。
图像空间的消隐算法:以屏幕窗口内的每个像素作为处理单元。确定在每一个像素处,场景中的 k 个物体哪一个距离观察到最近,从而用它的颜色来显示该像素。(这类算法是消隐算法的主流,因为物体空间的消隐算法计算量太大)。
Z 缓冲区 算法也叫做深度缓冲器算法,属于图像空间消隐算法。
该算法有帧缓冲器和深度缓冲器。对应两个数组:
- intensity( x , y ) :属性数组(帧缓冲器);存储图像空间中每个可见像素的颜色值或亮度
- depth( x , y ):深度数组(z-buffer):存放图像空间每个可见像素的 z 坐标(z坐标即像素的深度值)
先将 Z 缓冲器中各单元的初始置设置为最小值。当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值(保存在该像素所对应的Z 缓冲器的单元中)。如果大于原来的 Z 值,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色。
伪代码描述:
Z-Buffer 算法()
{
帧缓存全部置为背景色
深度缓存全部置为最小的Z值
for(每一个多边形)
{
扫描转换该多边形
for(该多边形在该像素的深度值Z(x,y))
{
计算该多边形在该像素的深度值Z(x,y)
if( z(x,y) > z缓存在(x,y)的值 )
{
把z(x,y)存入 z缓存中(x,y)处
把多边形在(x,y)处的颜色值存入帧缓存的(x,y)处
}
}
}
}