资源描述:
《第二章 光栅图形学ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2.1直线生成算法2.2圆生成算法2.3多边形扫描转换2.4区域填充2.5线宽与线型2.6字符2.7反走样技术第二章光栅图形学(基本图形生成算法)1图形的扫描转换或光栅化:确定最佳逼近图形的像素,并用指定属性写像素的过程。区域填充:确定区域对应的像素集,并用指定的属性或图案显示之。裁剪:确定一个图形的哪些部分在窗口内,必须显示;哪些部分在窗口外,不显示的过程。走样:由于显示器的空间分辨率有限,因像素逼近误差,使图形产生畸变的现象。反走样:用于减少或消除走样的技术。图形的扫描转换2直线的扫描转换确定最佳逼近于该直线的一组象素,并且按扫描线顺序,对这些象素进行写操
2、作。直线生成算法的要求直线要直直线的起、终点要准直线粗细要均匀速度要快几个常用算法数值微分法(DDA)中点画线法Bresenham算法2.1直线段的扫描转换算法32.1直线段的扫描转换算法直线的扫描转换基本思想按直线从起点到终点的顺序,每绘制(转换)一个点就与原直线比较,根据比较结果决定下一步的走向,从而一步一步逼近直线。(
3、K
4、<=1)由一个点到下一个点的走向方法有如下三种:X,Y方向各走一步;在X方向走一步;在Y方向走一步;这些数学意义上的点在光栅上是无法绘制的,只能逼近,令误差<0.5约定一步为一个像素,x每次向右走1步,如何确定y的值?42.1直线段的
5、扫描转换算法扫描转换顶点(参数)表示的图形用户点阵表示的图形光栅显示系统52.1直线段的扫描转换算法(DDA)2.1.1、数值微分法(DDA,digitaldifferentialanalyzer)基本思想已知过端点P0(x0,y0),P1(x1,y1)的直线段L,其直线方程为:y=kx+b直线斜率为从x0开始,向x右端点步进。步长=1(个象素),计算相应的y坐标y=kx+b;取象素点(x,round(y))作为当前点的坐标。缺点:一个乘法和一个加法。62.1直线段的扫描转换算法(DDA)12312372.1直线段的扫描转换算法(DDA)改进:计算yi+1=k
6、xi+1+B=kxi+B+kx=yi+kx当x=1:yi+1=yi+k即:当x每递增1,y递增k(即直线斜率);8voidDDALine(intx0,inty0,intx1,inty1,intcolor)intx;floatdx,dy,y,k;dx=x1-x0,dy=y1-y0;k=dy/dx,y=y0;for(x=x0;xx1,x++)putpixel(x,int(y+0.5),color);y=y+k;2.1直线段的扫描转换算法(DDA)9例:画直线段p(0,0)--P1(5,2)(k=0.4)xint(y+0.5)y+0.5000+0.5
7、100.4+0.5210.8+0.5311.2+0.5421.6+0.5522.0+0.52.1直线段的扫描转换算法(DDA)x、y实际显示的像素值数学意义上的y值(理想的y值)102.1直线段的扫描转换算法(DDA)特点增量算法直观、易实现浮点数,不利于用硬件实现注意上述算法仅适用于k≤1的情形。在这种情况下,x每增加1,y最多增加1。当
8、k
9、>1时,必须把x,y的地位互换,y每增加1,x增加1/k112.1直线段的扫描转换算法(中点画线法)M为中点,Q为理想直线与x=xp+1的交点,M在Q下方时应取P2为下一个像素,否则取P1。设直线的两个端点为(X0
10、,Y0)和(X1,Y1),直线方程为:F(x,y)=ax+by+c=0;(直线方程隐式表示)其中:a=y0-y1,b=x1-x0,c=x0*y1-x1*y012在直线上的点F(x,y)=0;在直线上方的点F(x,y)>0;在直线下方的点F(x,y)<0;2.1直线段的扫描转换算法(中点画线法)13基本思想(适于k≤1的情形;x方向总是+1,y的增量或为1或是0):当前象素点为(xp,yp)。下一个象素点为P1或P2。设M=(xp+1,yp+0.5),为p1与p2之中点,Q为理想直线与x=xp+1垂线的交点。将Q与M的y进行比较。当M在Q的下方,则P2应为下
11、个象素点;M在Q的上方,应取P1为下一点。(原理与DDA的一样,只是换了个角度,换了个方法)2.1直线段的扫描转换算法(中点画线法)14现在的问题是如何判断M在线的上方还是下方?构造判别式d=F(x+1,y+0.5)=a(x+1)+b(y+0.5)+c若d<0,M在直线下方,取(x+1,y+1);(Q更接近P2)若d>0,M在直线上方,取(x+1,y);若d=0,M在直线上,二者均可;约定取(x+1,y);缺点:每次计算d要做4个加法和两个乘法。对于d的计算换种方法。??2.1直线段的扫描转换算法(中点画线法)15改进的具体实现(d值不需要用公式计算,通过增量
12、计算)在上一步中d>=0,取了(x+1