消隐算法

Z-buffer算法

 

一、算法思想

先将Z缓冲器中各单元的初始值置为小值。当要改变某个像素的颜色值时,首先检查当前多边形的深度

值是否大于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中)。如果大于原来的z值,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色。

 

二、具体实现

(Z是近大远小)

从代码可看出,此算法需要2个数据,即帧缓冲器和深度缓冲器

 

但是此算法的缺点较多:

所以引入了一种改进方法,用单个变量代替整个帧缓存

三、改进后的算法

1.代码

 

2.点与多边形的包含性检测

此算法关键是找出像素点是否在pk的投影多边形内 

(1)射线法

 

 

(2)弧长法

 

 

(3)以顶点符号为基础的弧长累加法

同一个象限是0,跨过一个象限是π/2,跨过2个是π。这样不用投影,直接根据象限则可判定。

 

 区间扫描线算法

 

 一、算法思想

 

 二、具体实现

对投影多边形求交点,然后对交点排序。从而形成一个个区间,在区间中取一点,计算此处各个相关面的z值并进行比较,将此区间填色为z值最大面的颜色。

   

求交可以用增量方法来简化。

 

区域子分割算法

 

一、算法思想

 分而治之,不断分割窗口直到窗口内目标足够简单,可以显示为止。

                      

1.窗口仅包含一个多边形

2.窗口与一个多边形相交,且窗口内无其它多边形

3.窗口为一个多边形所包围

4.窗口与一个多边形相分离

 

二、具体实现

                     

 

 

posted on 2018-09-25 22:25  Jing_Rui  阅读(683)  评论(0编辑  收藏  举报

导航