【计算机图形2】实验2: 扫描线填充算法+Z-buffer被00覆盖点消除

前言:

通过扫描线算法对多边形面进行颜色随机填充。再使用Z-buffer算法比较重叠物体的点的深度,即对同一个X,Y位置的多个点,选择深度浅的点显示。

扫描线算法(本文的扫描线算法是对该文的补充扫描线算法完全解析):

对每个物体的表面分别进行扫描线算法,扫描线自底向上,扫描范围为物体的最低点的Y值到最高点的Y值。扫描线每次向上移动1个单位距离(1个像素)。 在openGL中,如果我们把画布大小定义为600X600px,画布坐标轴定义为(0,600,0,600),则在运算中,y或者x每增加1,相当于在屏幕上增加1个像素距离。
扫描线算法实行两两配对原则,即填充扫描线和多边形边产生的2个交点之间范围的点。为了保证每次都是产生偶数个交点,需要对形如上图的F点和A点进行区别处理。


我们只对单调递增或者单调递减的两条边进行切割。 (省略还没写)




下面步骤是对上面那篇参考文章的补充和解读:

  1. 扫描线第一次扫描到B点的y值,将边表ET(y)的边都存入活动边表AET中,然后扫描线对AET进行操作。
  2. 此时AET中有BC和BE两条边,两两配对填充颜色。填充完后向上扫描线向上移动,每次y+1。
  3. 扫描线一直上移到A点,此时ET(y)中又多了两条线DA和AC,我们把这两表插入到AET中,此时AET中就存在4条边,包括前面的CB和BE。按x递增方向排序边。x为边的底部(y小的)端点的x值。这时候继续把边两两匹配填充。
  4. 扫描线不断上移到C点,AET中删除y=ymax的边即AC和CB,剩下DA和BE,两两匹配填充。
  5. 扫描线上移到D点,AET中删除DA,此时发现ET(y中)有一条边DF,加入AET中。AET此时有DF, BE,匹配填充。
  6. 扫描线上移到E点,删除BE,加入FE,匹配填充DF和FE。
  7. 扫描到F点结束

        



(未写)1.X,Y 移到正 2.颜色除以255

猜你喜欢

转载自blog.csdn.net/sengo_gwu/article/details/79482777