Z-buffer算法
一、算法思想
先将Z缓冲器中各单元的初始值置为小值。当要改变某个像素的颜色值时,首先检查当前多边形的深度
值是否大于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中)。如果大于原来的z值,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色。
二、具体实现
(Z是近大远小)
从代码可看出,此算法需要2个数据,即帧缓冲器和深度缓冲器
但是此算法的缺点较多:
所以引入了一种改进方法,用单个变量代替整个帧缓存
三、改进后的算法
1.代码
2.点与多边形的包含性检测
此算法关键是找出像素点是否在pk的投影多边形内
(1)射线法
(2)弧长法
(3)以顶点符号为基础的弧长累加法
同一个象限是0,跨过一个象限是π/2,跨过2个是π。这样不用投影,直接根据象限则可判定。
区间扫描线算法
一、算法思想
二、具体实现
对投影多边形求交点,然后对交点排序。从而形成一个个区间,在区间中取一点,计算此处各个相关面的z值并进行比较,将此区间填色为z值最大面的颜色。
求交可以用增量方法来简化。
区域子分割算法
一、算法思想
分而治之,不断分割窗口直到窗口内目标足够简单,可以显示为止。
1.窗口仅包含一个多边形
2.窗口与一个多边形相交,且窗口内无其它多边形
3.窗口为一个多边形所包围
4.窗口与一个多边形相分离
二、具体实现