立方体画家消隐算法与Z-Buffer消隐算法 比较

本文对比了立方体画家算法和Z-Buffer消隐算法。画家算法通过深度排序物体来消隐,适合包围体但不适用于交叉情况;Z-Buffer算法基于像素深度排序,更灵活简单,实现立体图像。两者在正交投影的立方体应用中有所不同,画家算法按物体深度排序,Z-Buffer按像素排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

画家算法,又称深度排序法。
我们先看看它的算法:
(1)将屏幕设成背景色,

(2)把要画的物体(多边形)按其离开视点的从远到近排序(#add 确定可以排序么?不会有交叉的面?这个距离又是指哪个点到哪个点? 从后文得知,画家算法不适用于交叉的情况,只能针对包围体,此距离也是个最小距离)。由此构成深度优先级表。然后从远到近画物体(多边形),近的就因为优先级高而覆盖远的多边形。由此可消隐。


z缓冲区算法(Z-buffer算法)
先开一个帧缓冲区记录每个像素的亮度值,再开一个Z缓冲区存放每个像素的深度值。那么对于每个像素而言,它有两个参数值,需要定义两个数组。所以,对于每一个像素,由于有了深度这个数组,它在内存中就是立体的了,所以,在内存中整个图像都是立体的。
然后,逐行扫描,就可以测出每一行的深度值了。以此达到消隐的作用。
由此,我们可以看到画家算法和Z-buffer算法1的不同之处。


应该说,它们之间最本质的区别在于:画家算法是按照物体(多边形)的深度进行排序,比较容易实现;而Z-buffer算法是按照图像每一个像素进行排序,比总体排序灵活简单。


立方体画家消隐算法与Z-Buffer消隐算法在别的方面有所类似,在<计算机图形学实践教程VC++ 孔令德>中,两个算法用到的立方体都是正交投影,而不是透视投影,即立方体远离视点时显示的立方体仍然是原大小,不变化.只是二种算法核心思想不同:

 

一.立方体Z-Buffer消隐是 对于某一个像素点,不必对在靠近或远离视点的面进行排序,只需在遍历各面后找出该像素的深度最大的点(Z最大,即离视点最近)(先找深度大的点setPixel(),如果以后还有深度更大的,则通过设置新的颜色setPixel()来覆盖以前的点,其中要注意以yi为扫描线时,扫描线可能不与屏幕平行,可能是倾斜着的,就像把opengl的X轴绕Y轴旋转一个角度,如向量(1,-1,0),此次每次随x增大,z也会相应变化-A/C,其中(A,B,C)为该面的法向量),可以说它是对逐个像素进行深度判断进行的.主要代码如下:

for(T1=HeadE;T1!=NULL;T1=T1->next)//填充扫描线和多边形相交的区间

              {

                     if(In==false)

                     {

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值