计算机图形学基础教程第2章-光栅图形学(第二版)(孙家广-胡事民编著)(共25页).doc





《计算机图形学基础教程第2章-光栅图形学(第二版)(孙家广-胡事民编著)(共25页).doc》由会员分享,可在线阅读,更多相关《计算机图形学基础教程第2章-光栅图形学(第二版)(孙家广-胡事民编著)(共25页).doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上第二次课第2章 光栅图形学光栅图形显示器相当于一个象素的矩阵。图形的扫描转换(或图形的光栅化):确定最佳逼近图形的象素集合,并用指定属性写象素的过程。重要概念及算法:区域填充:二维图形的光栅化必须确定区域对应的象素集,并用指定的属性或图案显示之。裁剪:确定一个图形的哪些部分在窗口内,必须显示;那些部分落在窗口之外,不该显示的过程。走样反走样:光栅化时,由于显示器分辨率有限,对于非水平、非垂直的直线,因象素逼近误差,使所画图形产生畸变(台阶、锯齿)的现象称之为走样。用于减少或消除走样的技术称为反走样。隐藏消隐:隐藏部分是不可见的,如果不删除隐藏的线或面,可能对图形错误理
2、解。因此必须把隐藏的部分从图中删除,称为消隐。2.1 直线段的扫描转换算法直线的扫描转换:确定最佳逼近于该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作。三个常用算法:l 数值微分法(DDA)l 中点画线法l Bresenham算法2.1.1 数值微分(DDA)法基本思想:已知过端点的直线段L:,直线斜率为 ,从x的左端点x0开始,向x右端点步进,步长=1(个象素),计算相应的y坐标y=kx+b;取象素点(x, round(y)作为当前点的坐标。l 作为最底层的光栅图形算法,在通常的CAD/图形系统中,会被大量应用,因此,哪怕节约一个加法或减法,也是很了不起的改进。l 由此出发点,导致
3、增量算法的思想。计算当时;即:当x每递增1,y递增k(即直线斜率) 。算法程序2-1 (P18)例:画直线段,DDA算法演示。 2.1.2 中点画线法基本思想:当前象素点为(xp, yp) ,下一个象素点为P1或P2。设M=(xp+1, yp+0.5),为P1与P2之中点,Q为理想直线与x=xp+1垂线的交点。将Q与M的y坐标进行比较。l 当M在Q的下方,则P2应为下一个象素点;l M在Q的上方,应取P1为下一点。构造判别式:d=F(M)=F(xp+1, yp+0.5)=a(xp+1)+b(yp+0.5)+c其中a=y0-y1, b=x1-x0, c=x0y1-x1y0n 当d0,M在L(Q点
4、)上方,取右方P1为下一个象素;n 当d=0,选P1或P2均可,约定取P1为下一个象素;可采用增量计算,提高运算效率:l 若d0,则取正右方象素P1 (xp+1, yp),要判下一个象素位置,应计算d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)=d+a;增量为a。l 若d0,则取右上方象素P2 (xp+1, yp+1)。要判断再下一象素,则要计算d2= F(xp+2, yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b ;增量为ab。画线从(x0, y0)开始,d的初值:d0=F(x0+1, y0+0.5)=F(x0, y0)+a+0.5b=a+0.5
5、b。可以用2d代替d来摆脱小数,提高效率。令d0=2a+b,d1=2a,d2=2a+2b。算法程序2-2 (P19)例:用中点画线法中点画线算法演示2.1.3 Bresenham算法基本思想:过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后根据误差项的符号确定该列象素中与此交点最近的象素。设直线方程为:yi+1= yi+k(xi+1-xi)= yi+k,其中k=dy/dx。 因为直线的起始点在象素中心,所以误差项d的初值d0=0。x下标每增加1,d的值相应递增直线的斜率值k,即ddk。一旦d1,就把它减去1,这样保证d在0、1之间。l 当d0.5
6、时,最接近于当前象素的右上方象素(xi+1,yi+1),y方向加1,d减去1;l 而当d0.5时,更接近于右方象素(xi+1,yi)。为方便计算,令ed-0.5,e的初值为-0.5,增量为k。l 当e0时,取当前象素(xi,yi)的右上方象素(xi+1,yi+1),e减小1;l 而当e0时,更接近于右方象素(xi+1,yi)。算法程序2-3 (P21)例:Line: P0(0, 0), P1(5,2) k=dy/dx=0.4,图示可以改用整数以避免除法。由于算法中只用到误差项的符号,因此可作如下替换: 。最终,Bresenham算法也是每个象素,需一个整数算法,其优点是可以用于其他二次曲线。第
7、三次课2.2 圆弧的扫描转换算法圆的特征:八对称性,只要扫描转换八分之一圆弧,就可以求出整个圆弧的象素集。中点画圆法:考虑中心在原点,半径为R的第二个8分圆。构造判别式(圆方程):l 若 d=0, 则应取P2为下一象素,而且下一象素的判别式第一个象素是(0,R),判别式d的初始值为。算法程序2-5 (P22)为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。使用e=d-0.25代替d,e0=1-R。中点画圆算法演示2.3 多边形的扫描转换与区域填充多边形有两种重要的表示方法:顶点表示和点阵表示。多边形的扫描转换:把多边形的顶点表示
8、转换为点阵表示。区域可采用内点表示和边界表示两种表示形式。区域填充:指先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。多边形分为凸多边形、凹多边形、含内环的多边形。2.3.1 多边形的扫描转换2.3.1.1 扫描线算法基本思想:按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,即完成填充工作。对于一条扫描线填充过程可以分为四个步骤:l 求交 计算扫描线与多边形各边的交点。l 排序 把所有交点按x值的递增顺序排序。l 配对 将第1个与第2个、第3个与第4个交点配对每对交点代表扫描线与多边形的一个相交区间。l 填色 把相交区间内的象素置成多边形的颜色,把
9、相交区间外的象素置成背景色。图2-8扫描线与多边形的顶点或边界相交时,必须正确的交点的取舍。只需检查顶点的两条边的另外两个端点的y值。按这两个y值中大于交点y值的个数是0,1,2来决定。 图2-11数据结构:l 活性边表(AET):把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中。l 结点内容:x:当前扫描线与边的交点坐标x:从当前扫描线到下一条扫描线间x的增量ymax:该边所交的最高扫描线号ymaxl 新边表(NET):存放在该扫描线第一次出现的边。若某边的较低端点为ymin,则该边就放在扫描线ymin的新边表中。图2-10假定当前扫描线与多边形某一条
10、边的交点的横坐标为x,则下一条扫描线与该边的交点不需要重新计算,只要加一个增量x。设该边的直线方程为:ax+by+c=0。若yyi,x=xi;则当y = yi+1时,其中为常数。算法程序2-6图2-8中多边形的AET和填充过程:5 -3 25 3 3 2 0 78 3 3 填充5,5)填充2,8)扫描线1扫描线22 0 711 0 8 填充2,11)扫描线32 0 711 0 8 填充2,11)扫描线42 0 7扫描线55 2 85 -1.5 7填充2,5) 5,11)11 0 8 2 0 7扫描线67 2 83.5 -1.5 7填充2,3.5) 7,11)11 0 8 扫描线79 2 811
11、 0 8 填充9,11)扫描线8扫描线0初始化2.3.1.2 边界标志算法基本思想:l 帧缓冲器中对多边形的每条边进行直线扫描转换,亦即对多边形边界所经过的象素打上标志。l 然后再采用和扫描线算法类似的方法将位于多边形内的各个区段着上所需颜色。l 使用一个布尔量inside来指示当前点是否在多边形内的状态。l Inside的初值为假,每当当前访问的象素为被打上边标志的点,就把inside取反。对未打标志的象素,inside不变。 l 若访问当前象素时,inside为真,说明该象素在多边形内,则把该象素置为填充颜色。 用软件实现时,扫描线算法与边界标志算法的执行速度几乎相同,但由于边界标志算法不
12、必建立维护边表以及对它进行排序,所以边界标志算法更适合硬件实现,这时它的执行速度比有序边表算法快一至两个数量级。2.3.2 区域填充算法l 区域指已经表示成点阵形式的填充图形,它是象素的集合。l 区域可采用内点表示和边界表示两种表示形式。l 区域可分为4向连通区域和8向连通区域。l 区域填充指先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。区域填充算法要求区域是连通的。l 4向连通区域和8向连通区域2.3.2.1 区域填充的递归算法内点表示的4连通区域的递归填充算法,算法程序2-8边界表示的4连通区域的递归填充算法,算法程序2-92.3.2.2 区域填充的扫描线算法算法基本过程
13、:l 首先填充种子点所在扫描线上的位于给定区域的一个区段;l 然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来;l 反复这个过程,直到填充结束。(1) 初始化:堆栈置空。将种子点(x,y)入栈。(2) 出栈:若栈空则结束。否则取栈顶元素(x,y),以y作为当前扫描线。(3) 填充并确定种子点所在区段:从种子点(x,y)出发,沿当前扫描线向左、右两个方向填充,直到边界。分别标记区段的左、右端点坐标为xl和xr。(4) 并确定新的种子点:在区间xl,xr中检查与当前扫描线y上、下相邻的两条扫描线上的象素。若存在非边界、未填充的象素,则把每一区间的最右象素作为种子点压
14、入堆栈,返回第(2)步。上述算法对于每一个待填充区段,只需压栈一次;因此,扫描线填充算法提高了区域填充的效率。例题图示,共6幅图,未完成部分由学生思考完成2.4 字符字符指数字、字母、汉字等符号。计算机中字符由一个数字编码唯一标识。国际上最流行的字符集:“美国信息交换用标准代码集” (American Standard Code for Information Interchange),简称ASCII码。它是用7位二进制数进行编码表示128个字符;包括字母、标点、运算符以及一些特殊符号。汉字编码的国家标准字符集GB2312-80,94个区,94个位,符号 = 1个区码 + 1个位码用字节的最高
15、位标识,最高位为0表示ASCII码;最高位为1表示汉字编码。字库:存储每个字符的形状信息,分为点阵型和矢量型。2.4.1 点阵字符点阵字符:每个字符由一个位图表示,该位为1表示字符的笔画经过此位,对应于此位的象素应置为字符颜色。该位为0表示字符的笔画不经过此位,对应于此位的象素应置为背景颜色。图2-15在实际应用中,有多种字体(如宋体、楷体等),每种字体又有多种大小型号,因此字库的存储空间是很庞大的。解决这个问题一般采用压缩技术。点阵字符的显示分为两步。首先从字库中将它的位图检索出来。然后将检索到的位图写到帧缓冲器中。2.4.2 矢量字符2.4.2.1 相关概念在一个使用X-Y坐标系的平面中,
16、对于一个有确定方向的线段,若已知:l 一个端点(如起点)坐标l 线段长度l 线段与X座标轴正方向的夹角角度值就可以画出平面内的一个有向线段矢量,那么:(1) 矢量的方向是线段起点指向线段的终点,(2) 矢量X坐标轴正方向的夹角是指,以矢量起点为旋转中心,该矢量从与X轴正向平行、且方向相同的位置逆时针旋转至当前位置所经过的旋转角度,记作LDA。在一个使用X-Y坐标系的平面中,一个有确定方向的线段(即矢量),有以下特征:l 起点的坐标l 线段的长度l LDA值YOA(x0,y0)LDAB(x1,y1)X2.4.2.2 矢量字符构建定义:(1) 字符由线段构成;(2) 每条线段有方向;(3) 构成字
17、符的所有线段是连续的,即首尾相连;(4) 每条线段有三个属性:a.长度;b.LDA值;c.可见性;(5) 整个字符图形只有一个起点和一个终点;(6) 起点位于右下角。矢量字符构造步骤:(1) 使用起点作为第一个矢量线段的端点;(2) 将矢量线段置于水平位置,线段方向与X轴正向相同,以起点为中心,旋转角度为LDA;(3) 以矢量线段的终点作为下一个线段的起点,重复(1)(2),直到所有的矢量线段被放在正确的位置上。2.4.2.3 矢量字符举例特点:l 点阵字符:存储量大,易于显示l 矢量字符:存储量小,美观,变换方便;但需要光栅化后才能显示。2.4.3 字符属性l 字体: l 字高:l 字宽因子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 基础教程 光栅 第二 孙家广 胡事民 编著 25

限制150内