消隐算法
1.消隐算法简介与分类
消隐:绘制时消除被遮挡的不可见的线或面。
按对象分类:线消隐、面消隐
按消隐空间分:
1.物体空间的消隐算法(包含Roberts算法,光线投射法)
2.图像空间的消隐算法(包含Z-buffer算法,扫描线算法,Warnock消隐算法)
2.Z-Buffer消隐算法
帧缓冲器:intensity(x,y),像素的光强或颜色
深度缓冲器:depth(x,y),像素的z坐标
算法思想:
上面这张图中,p 1 p_1p1在p 2 p_2p2的前面,p 1 p_1p1的 z zz 坐标大于p 2 p_2p2的 z zz 坐标,所以显示的是p 1 p_1p1。
z-Buffer算法的优点:
1.算法比较简单,也很直观
2.以近物取代远物,有利于硬件实现
z-Buffer算法的缺点::
1.占用空间大;
2.没有利用图形的相关性与连续性
3.是在像素级上的消隐算法
只用一个深度缓存变量zb的改进算法:
判断象素点(i,j)是否在pk的投影多边形之内,牺牲时间换区空间。
判断点是否在投影多边形之内:射线法,弧长法,弧长累加法
3.区间扫描线算法
算法简介:
1.[a4,a5],用背景色显示
2.[a1,a2],显示该多边形的颜色
3.[a6,a7], 必须通过深度测试判断哪个多边形可见
算法存在几个问题:
1.求交点?利用增量算法简化求交
2.在这个区间上有哪些多边形是和这个区间相关?多边形扫描转换算法,活动边表等
4.区域子分割算法
区域子分割算法也叫 Warnock算法。
Warnock算法简介:
1.采用了分而治之的思想,利用了堆栈的数据结构
2.把物体投影到全屏幕窗口上,然后递归分割窗口,直到可以显示
什么时候可以显示(如下图):
1.窗口中仅包含一个多边形
2.窗口与一个多边形相交,且窗口内无其它多边形
3.窗口为一个多边形所包围
4.窗口与一个多边形相分离
窗口有多个多边形投影面,如何显示?
把物体投影到全屏幕窗口上,然后递归分割窗口,直到窗口内目标足够简单,可以显示为止。
窗口仅有象素那么大,而窗口内仍有两个以上的面,怎么办?
不必再分割,只要取窗口内最近的可见面的颜色或所有可见面的平均颜色作为该象素的值