3、图形光栅化.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基本图形光栅化 在光栅显示器上显示任何一种图形,实际上都是一些具有一种或多种颜色的象素的集合。 对图形的扫描转换一般分为两个步骤:先确定有关象素,再用图形的颜色或其它属性,对象素进行某种写操作。 图形光栅化时,还有窗口内图形显示的裁剪和反走样的技术。 直线的扫描转换 直线的扫描转换 确定最佳逼近于该直线的一组象素 按扫描线顺序,对这些象素进行写操作 三个常用算法 数值微分 DDA 算法 中点画线法 Bresenham画线算法 数值微分 DDA 算法 假定直线的起点、终点分别为:(x0,y0 , x1,y1 ,且都为整数。  X i+1 ,Yi + k X i , Int Yi +0.5 X i , Yi 栅格交点表示象素点位置 。 。 。 。 数值微分 DDA 算法 已知过端点P0 x0, y0 , P1 x1, y1 的直线段L:y kx+b 直线斜率为: 这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。 数值微分 DDA 算法 计算yi+1 kxi+1+b kxi+b+k?x yi+k?x 当?x 1; yi+1 yi+k 即:当x每递增1,y递增k 即直线斜率 ; 注意上述分析的算法仅适用于?k? ≤1的情形。在这种情况下,x每增加1,y最多增加1。 当 ?k? ?1时,必须把x,y地位互换 数值微分 DDA 算法 void DDALine int x0,int y0,int x1,int y1,int color ? int x; float dx, dy, y, k; dx x1-x0; dy y1-y0; k dy/dx ; y y0; for x x0; x x1; x++ ? drawpixel x, int y+0.5 , color ; y y+k; ? ? 数值微分 DDA 算法 例:画直线段P0 0,0 --P1 5,2 x int y+0.5 y+0.5 0 0 0+0.5 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5 5 2 2.0+0.5 数值微分 DDA 算法 增量算法:在一个迭代算法中,如果每一步的x、y值是用前一步的值加上一个增量来获得,则称为增量算法。 DDA算法就是一个增量算法。 缺点:在此算法中,y、k必须是float,且每一步都必须对y进行舍入取整,不利于硬件实现。 中点画线法 原理: 假定直线斜率0 K 1,且已确定点亮象素点P(XP,YP),则下一个与直线最接近的像素只能是P1点或P2点。设M (XP+1,YP+0.5)为中点,Q为直线与垂直线X XP+1交点,现需确定下一个点亮的象素。 中点画线法 当M在Q的下方,P2离直线更近- 取P2; M在Q的上方,P1离直线更近- 取P1; M与Q重合, P1、P2任取一点。 问题:如何判断M与Q点的关系? 中点画线法 假设直线方程为:F x,y ax+by+c 0 其中a y0-y1, b x1-x0, c x0y1-x1y0 由常识知: 欲判断M点是在Q点上方还是在Q点下方,只需把M代入F x,y ,并检查它的符号。 中点画线法 构造判别式:d F M F xp+1,yp+0.5 a xp+1 +b yp+0.5 +c 当d 0,M在直线 Q点 下方,取右上方P2; 当d 0,M在直线 Q点 上方,取右方P1; 当d 0,选P1或P2均可,约定取P1; 能否采用增量算法呢? 中点画线法 若d?0 - M在直线上方 - 取P1; 此时再下一个象素的判别式为 d1 F xp+2, yp+0.5 a xp+2 +b yp+0.5 +c a xp+1 +b yp+0.5 +c +a d+a; 增量为a 若d 0 - M在直线下方 - 取P2; 此时再下一个象素的判别式为 d2 F xp+2, yp+1.5 a xp+2 +b yp+1.5 +c a xp+1 +b yp+0.5 +c +a +b d+a+b ; 增量为a+b 中点画线法 画线从 x0, y0 开始,d的初值 d0 F x0+1, y0+0.5 a x0 +1 +b y0 +0.5 +c F x0, y0 +a+0.5b a+0.5b 由于只用d 的符号作判断,为了只包含整数运算, 可以用2d代替d来摆脱小数,提高效率。 优点: 只有整数运算,不含乘除法 可用硬件实现 中点画线法 void MidpointLine int x0,int y0,int x1, int y1,int color int a, b, d1, d2, d, x, y; a y0-y

文档评论(0)

mei1809816wei + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档