第三章输出图元.ppt
《第三章输出图元.ppt》由会员分享,可在线阅读,更多相关《第三章输出图元.ppt(110页珍藏版)》请在三一办公上搜索。
1、1,第三章 输出图元,讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别Telephone:0551-3603484 Email:Homepage:http:/,2,第三章 输出图元,图元的生成:从图元的参数表示形式(由图形软件包的使用者指定)到点阵表示形式(光栅显示系统刷新时所需的表示形式)的转换。,3,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆和圆弧的生成3.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区,4,3.1 画线算法,3.1.1 DDA画线算法3.
2、1.2 Bresenham画线算法3.1.3 并行画线算法3.1.4 画线算法的讨论,5,3.1.1 DDA画线算法,直线段生成求与直线段充分接近的 像素集像素间网格均匀坐标是整型假设直线段的宽度为1,线段的生成,6,数字微分(DDA)画线算法(Digital Differential Analyzer),3.1.1 DDA画线算法,7,数字微分(DDA)画线算法(digital differential analyzer)直接求交算法:划分区间0,1,dt=1/n 计算坐标 取整 复杂度:乘法+加法+取整,3.1.1 DDA画线算法,8,DDA增量算法 xi+1=x1+x*ti+1=xi+x
3、*dt=xi+xinc yi+1=y1+y*ti+1=yi+y*dt=yi+yinc 复杂度:加法+取整,3.1.1 DDA画线算法,9,DDA算法优点利用光栅特性消除了直线方程中的乘法,比直接使用直线方程的计算速度快!DDA算法缺点:取整误差的积累使得对于较长线段所计算的像素位置偏离实际线段。需要进行浮点数运算。运行效率低。不便于用硬件实现。,3.1.1 DDA画线算法,xi+1=xi+xincyi+1=yi+yinc,10,3.1 画线算法,3.1.1 DDA画线算法3.1.2 Bresenham画线算法 3.1.3 并行画线算法3.1.4 画线算法的讨论,11,3.1.2 Bresenh
4、am画线算法,目标:消除DDA算法中的浮点运算,线段的端点坐标:(x1,y1)和(x2,y2)线段方程:y=mx+b,12,Bresenham画线算法思想(xk,yk)是直线段上的点 H:(xk+1,yk+1)L:(xk+1,yk)A:(xk+1,y)=(xk+1,m(xk+1)+b)dlowerdupper,取H点 dlower 0取上像素(xk+1,yk+1),p 0 采用下像素(xk+1,yk)。,3.1.2 Bresenham画线算法,13,y=m(xk+1)+b dlower=y-yk=m(xk+1)+b-yk dupper=yk+1-y=yk+1-m(xk+1)-b dlower-
5、dupper=2m(xk+1)-2yk+2b-1 m=2y/x pk=x(dlower-dupper)=2y.xk-2x.yk+c pk+1=2y.xk+1-2x.yk+1+c pk+1-pk=2y(xk+1-xk)-2x(yk+1-yk)pk+1=pk+2y(xk+1-xk)-2x(yk+1-yk)xk+1-xk=1 pk+1=pk+2y-2x(yk+1-yk)pk+1 0取上像素,pk+1 0 取下像素。yk+1-yk=0或1,取绝于参数pk的符号。,3.1.2 Bresenham画线算法,14,在x=x1+1处,dlower=m,dupper=1-m,p1=2y xBresenham画线
6、算法的特点 只包括整数的加法、减法和左移(乘2)操作,效率高。适合用硬件实现。思考:Bresenham画线算法如何应用到其它卦限?,3.1.2 Bresenham画线算法,15,2月21日作业1 实现一个折线函数,用Bresenham画线算法来显示连接n个输入点的一组线段。当n=1时绘制单个点。,3.1.2 Bresenham画线算法,16,3.1画线算法,3.1.1 DDA画线算法3.1.2 Bresenham画线算法3.1.3 并行画线算法 3.1.4 画线算法的讨论,17,3.1.3 并行画线算法,让每一个处理器处理一组像素 适用于系统中的处理器非常多 的场合。给定一条线段,可以得到它的
7、 包围盒,包围盒中共有x*y 个像素。让每个处理器处理一 个像素,设像素的坐标为(x,y),则像素到线段的垂直距离:d=A*x+B*y+C 其中,A=-y/linelength B=x/linelength C=(x1x-y1x)/linelength,线段的包围盒,18,3.1.3 并行画线算法,像素到线段的垂直距离:d=A*x+B*y+C 其中,A=-y/linelength B=x/linelength C=(x1x-y1x)/linelength Linelength=(x2+y2)1/2 d小于某个设定值,该像素就被 设置成指定的线段颜色。可以看出,这种并行画线算法特别适合于画具有
8、一定宽度的线段。,线段的包围盒,19,3.1 画线算法,3.1.1 DDA画线算法3.1.2 Bresenham画线算法3.1.3 并行画线算法3.1.4 画线算法的讨论,20,线段端点的次序要求:线段P1P2与线段P2P1在图元生成后应该生成相同的像素集合,这样才能保证同一线段的像素表示与线段的端点次序无关。存在问题:前述算法中,线段P1P2与线段P2P1上的点可能不一致。解决方法:对于|k|1的线段,总是以左端点为 起点,从左向右生成;对于|k|1的线段,总是以下 端点为起点,从下向上生成。,3.1.4 画线算法的讨论,21,3.1.4 画线算法的讨论,线段的亮度 现象:A比B亮。原因:A
9、上的像素点密集。解决方法:图形保真技术。,22,3.1 画线算法,3.1.1 DDA画线算法3.1.2 Bresenham画线算法3.1.3 并行画线算法3.1.4 画线算法的讨论,23,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆和圆弧的生成3.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区,24,3.2 帧缓冲器的装载,addr(x,y)=addr(0,0)+y*xmax+x addr(x+1,y)=addr(x,y)+1 addr(x+1,y+1)=addr(x,y)+xm
10、ax+1,25,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆的生成3.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区,26,3.3 圆、椭圆的生成,3.3.1 圆的生成 3.3.2 椭圆的生成,27,3.3.1 圆的生成,处理对象:圆心在原点的圆弧圆的八对称性两种直接离散方法:离散点:x2+y2=R(x,sqrt(R2-x2)离散角度:x=Rcos y=Rsin 缺点:计算量大。,28,圆弧的正负划分性 F(x,y)=x2+y2-R2圆弧外的点:F(X,Y)0圆弧内的点:F(X,
11、Y)0,3.3.1 圆的生成,29,中点画圆算法示意图,3.3.1 圆的生成,中点画圆算法的优点:效率高。只用到整数的加法、减法和左移。(乘2)运算。适合用硬件实现。,30,3.3.1 圆的生成,31,3.3.1 圆的生成,32,3.3.1 圆的生成,2月21日作业2 教材P139 3.21,33,3.3 圆、椭圆的生成,3.3.1 圆的生成 3.3.2 椭圆的生成,34,3.3.2 椭圆的生成,椭圆通过椭圆上任 一点到两个焦点 的距离之和等于 常数。椭圆方程f(x,y)=ry2x2+rx2y2-rx2ry2=0。椭圆的对称性。,35,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载
12、3.3 圆、椭圆的生成3.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区,36,3.4 其他曲线,3.4.1 画锥曲线 3.4.2 多项式曲线,Ax2+By2+Cxy+Dx+Ey+F=0,y=a0+a1x+a2x2+an-1xn-1+anxn,37,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆和圆弧的生成3.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区,38,3.5 并行曲线画法,圆:等份圆弧
13、或x坐标椭圆或其它曲线:扫描线分段方法,39,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆和圆弧的生成3.4 其它曲线3.5 并行曲线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 多边形的填充3.9 区域填充图元,40,3.6 像素编址和对象的几何要素,当对象经扫描转换进帧缓存后,输入描述变换为对应有限屏幕区域的像素坐标,且显示的光栅图像可能并不严格符合相关的尺寸。解决方法:简单地按照物体边界与像素区域的覆盖量来调整物体的显示尺寸。将世界坐标系映射到像素间的屏幕位置,使物体的边界与像素边界对齐,而不是与像素中心对齐。屏幕上(x,y)占据
14、对角位置(x,y)和(x+1,y+1)处的单位正方形。,41,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆和圆弧的生成3.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区,42,3.7 保留显示的物体的几何特性,将物体的几何描述转换为象素表示时,将把数学上的点转换为有限的屏幕区域.假如要保留由物体的输入坐标指定的原始几何度量,那么在将物体的定义转换到屏幕显示时,就需要考虑象素的有限尺寸。,43,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆和圆弧的生成3
15、.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区,44,3.8 填充区图元,填充区 表面细分,45,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆和圆弧的生成3.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区3.10 OpenGL学习,第三章 输出图元,46,3.9 多边形填充区,多 边 形:由三个或更多称为顶点的坐标位置描述的 平面图形。分 类:凸多边形或凹多边形。退化多边形:共线或重叠坐标位置的顶点集。,47,
16、多边形的表示方法顶点表示点阵表示,3.9 多边形填充区,48,3.9 多边形填充区,逐个判断绘图窗口内的像素:如何判断点与多边形的内外关系?逐点判断法程序简单,速度太慢,效率低!,49,3.9 多边形填充区,void FillPolygonPbyP(Polygon*P,int polygonColor)int x,y;计算ymin,ymax,xmin,xmax;for(y=ymin;y=ymax;y+)for(x=xmin;x=xmax;x+)if(IsInside(P,x,y)PutPixel(x,y,polygonColor);else PutPixel(x,y,backgroundCol
17、or);/*end of FillPolygonPbyP()*/,#define MAX 100Typedef struct int PolygonNum;/多边形顶点个数 Point vertexcesMAX/多边形顶点数组 Polygon/多边形结构,50,射线法,由点Pc(xc,yc)出发向任意方向作射线,计算此射线与多边形所有交点个数,如果交点个数为奇数,则点在多边形内部,如果交点个数为偶数,则点在多边形外部.,3.9 多边形填充区,51,3.9 多边形填充区,多边形网格由若干个相邻的多边形(polygon)组成,每个多边形由若干条首尾相连的边(edge)组成,每条边 连接两个顶点(v
18、ertice),一个顶点至少连接两条边,一条边至少属于一个多边形并且至多连接两个相邻的多边 形。,52,3.9 多边形填充区,53,3.9 多边形填充区,多边形网格表示的方法:显式表示 指向顶点表的指针 指向边表的指针 方程表示,54,显式表示:显式表示的缺点:浪费空间 没有给出共享顶点与共享边的信息 重复描画,3.9 多边形填充区,P1=(x1,y1,z1),(x2,y2,z2),(x4,y4,z4)P2=(x4,y4,z4),(x2,y2,z2),(x3,y3,z3),55,3.9 多边形填充区,指向顶点表的指针 每个顶点只在顶点表V=(x1,y1,z1),(x2,y2,z2),(xn,y
19、n,zn)中存储一次,每个多边形都用指向顶点表 的指针(或索引)列表来表示。优点:节省空间,便于修改顶点坐标。缺点:找出共享某一条边的多边形仍然很困难,在画 多边形网格时,共享边仍然会被画两次。,56,3.9 多边形填充区,V=V1,V2,V3,V4=(x1,y1,z1),(x4,y4,z4)P1=V1,V2,V4 P2=V4,V2,V3,57,3.9 多边形填充区,用指向边表的指针来表示多边形网格时,每个顶点仍然只在顶点表V中存储一次,但每个多边形不再用指向顶点表的指针来表示,而是用指向边表的指针来表示。边表中每条边只存储一次,每条边都包括构成该边的两个顶点(用在顶点表中的索引来表示)。,V
20、=V1,V2,V3,V4=(x1,y1,z1),(x4,y4,z4)E=E1,E2,E3,E4,E5=(V1,V2),(V2,V3),(V3,V4),(V4,V2),(V4,V1)P1=E1,E4,E5P2=E2,E3,E4,指向边表的指针,58,3.9 多边形填充区,对多边形网格的典型操作:确定共享某一顶点的所有边。确定共享某一顶点或某一条边的所有多边形。确定构成某一条边的两个顶点。确定构成某一多边形的所有边。进行合法性检查(如孤立顶点、边或多边形)等等。,59,3.9 多边形填充区,例1#Vertex/点数据#skinhead/特征名称0.0000-31.9007 487.6600/点的坐
21、标31.0000-28.3430 470.464063.0000-29.9017 455.9880#facet/面数据#skinhead/特征名称 0 1 16/点的索引值 1 15 16 16 15 13,60,点3100.30002357478543126.84678751731815.50.30002357479600915.526.8467875173180.3000235747960091.8982025386784e-015310.300023574785431-15.526.8467875173180.300023574796009-26.84678751731815.50.30
22、0023574796009网格624223258257204223257223204192258223259236261226235221226,3.9 多边形填充区,例2,61,3.9 多边形填充区,多边形表示例子,62,3.9 多边形填充区,凹多边形识别:凹多边形至少有一个内角大于180。识别凹多边形:通过计算连续两边向量的叉积来识别凹多边形。向量叉积:E1E2=(E1yE2z-E1zE2y,E1zE2x-E1xE2z,E1xE2y-E1yE2x),(E1 E2)z0(E2 E3)z0(E3 E4)z0(E5 E6)z0(E6 E1)z0,63,3.9 多边形填充区,分割凹多边形:向量方法
23、,E1 E2=(0,0,1)E2 E3=(0,0,-2)z0E3 E4=(0,0,2)E4 E5=(0,0,6)E5 E6=(0,0,6)E6 E1=(0,0,2),E1=(1,0,0)E2=(1,1,0)E3=(1,-1,0)E4=(0,2,0)E5=(-3,0,0)E6=(0,-2,0),延长E2分割多边形。,64,3.9 多边形填充区,方程表示,Ax+By+Cz+D=0,(A/D)x+(B/D)y+(C/D)z=-1,将平面上不共线的三个点的坐标(x1,y1,z1)、(x2,y2,z2)和(x3,y3,z3)代入上式。,(A/D)x1+(B/D)y1+(C/D)z1=-1(A/D)x2+
24、(B/D)y2+(C/D)z2=-1(A/D)x3+(B/D)y3+(C/D)z3=-1,65,3.9 多边形填充区,假设平面的法向量为N,P为平面上任意一点,则N.P=-D。点在平面上 Ax+By+Cz+D=0 点在平面后方 Ax+By+Cz+D0,66,第三章 输出图元,3.1 画线算法 3.2 帧缓冲器的装载3.3 圆、椭圆和圆弧的生成3.4 其它曲线3.5 并行画线算法3.6 像素编址和对象的几何要素3.7 保留显示物体的几何特性3.8 填充区图元3.9 多边形填充区3.10 OpenGL学习,67,3.10 OpenGL学习,多边形 像素阵列 字符图元 显示列表 显示窗口重定形,68
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 输出
链接地址:https://www.31ppt.com/p-5293869.html