CG - 中国石油大学.ppt

返回 相似 举报
CG - 中国石油大学.ppt_第1页
第1页 / 共62页
CG - 中国石油大学.ppt_第2页
第2页 / 共62页
CG - 中国石油大学.ppt_第3页
第3页 / 共62页
CG - 中国石油大学.ppt_第4页
第4页 / 共62页
CG - 中国石油大学.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述:
1,第7章二维观察,2,本章目标,理解二维图形的绘制过程图形裁剪方法窗口到视区的变换学会使用OpenGL的显示函数,3,主要内容,二维观察流水线窗口到视区的变换OpenGL二维观察函数裁剪直线段裁剪多边形裁剪字符裁剪,4,7.1二维观察流水线,几个概念裁剪窗口ClippingWindow需要显示的场景区域又称为世界窗口或观察窗口,简称窗口在世界坐标系(又称用户坐标系)内定义视口Viewport指显示设备上用来显示图形的区域又称视区,在设备(屏幕)坐标系内定义裁剪Clip从场景中确定位于窗口内的图形,视口,屏幕,,,,5,7.1二维观察流水线,裁剪窗口和视区的关系改变视口位置可以在输出设备的不同位置上观察物体使用多个视口可以在屏幕不同的位置观察场景的不同部分改变窗口的尺寸达到改变视口内显示对象的多少改变视口的尺寸实现对象放缩,6,7.1二维观察流水线,二维观察变换二维世界坐标系场景描述到设备坐标系的映射又称为窗口到视区的变换或窗口变换二维图形的观察流水线(显示流程),几何变换,裁剪,7,7.2窗口到视区的变换,目标将窗口之中的图形变换到视区中变换的计算变换的分解与合成窗口xmin,ymin长度(Ex);宽度(Ey)视区umin,vmin长度(Eu);宽度(Ev),,,8,7.2窗口到视区的变换,步骤在世界坐标系中,平移使xmin,ymin至坐标原点,变换为T-xmin,-ymin放缩使窗口的大小与视区相等,变换为SEu/Ex,Ev/Ey在设备坐标系中,平移使窗口与视区重合,变换为Tumin,vmin,9,7.2窗口到视区的变换,变换矩阵,注意这里不需要逆变换,10,7.3OpenGL二维观察函数,流程程序窗口-裁剪窗口-视区GLUT显示窗口初始化glutInit选择颜色和缓存,如GLUT_RGB|GLUT_SINGLE背景颜色glClearColorred,green,blue,alpha参数与选择的颜色模式相关,取值在0和1之间,11,7.3OpenGL二维观察函数,投影模式OpenGL专门为三维应用而设计,但可将三维观察函数应用于二维观察投影函数glMatrixModeGL_PROJECTION;//指定投影矩阵为当前矩阵glLoadIdentity;//初始化GLU裁剪窗口函数定义函数gluOrtho2Dleft,right,bottom,top;功能将场景映射到屏幕的正交投影参数为4个平面(3维)默认大小为(-1,1,-1,1),12,7.3OpenGL二维观察函数,OpenGL视口函数定义函数glViewportxvmin,yvmin,vpwidth,vpheight;视口为矩形在视口内绘制图形对象指定显示内容函数glutDisplayFuncpictureDescrippictureDescrip为回调函数,主要绘制图形启动程序glutMainLoop,13,7.3OpenGL二维观察函数,实例7-1,includeincludeincludeclasswcPt2D{publicGLfloatx,y;};voidinitvoid{glClearColor1.0,1.0,1.0,0.0;//设置裁剪窗口glMatrixModeGL_PROJECTION;gluOrtho2D-100.0,100.0,-100.0,100.0;//几何变换矩阵模式glMatrixModeGL_MODELVIEW;},14,7.3OpenGL二维观察函数,实例7-1(续),,voidtrianglewcPt2D*verts{GLintk;glBeginGL_TRIANGLES;fork0;k0maxxT,xBxT;minxT,xBxBP0P1斜率K0不是执行(3),否则执行。计算xT,测试LL≤xT若成立,计算xB,测试xB≤RR若成立,有可见线段xαmaxLL,xB;xβminRR,xT3K0计算xB,测试LL≤xB若成立,计算xT,测试xT≤R若成立,有可见线段xαmaxLL,xT;xβminRR,xB特点二维转化为一维按需求交点,提高效率,7.5.5Liang-Barsky,41,7.6多边形裁剪,错觉多边形边界是直线段的组合,那么能否利用线段裁剪算法不能用线段裁剪方法,42,7.6多边形裁剪,问题1)因为边界不再封闭,需要用窗口边界的恰当部分来封闭它,如何确定其边界,裁剪结果多边形的边由裁剪多边形和主多边形的边(边的一部分)构成,43,2)一个凹多边形可能被裁剪成几个小的多边形,如何确定这些小多边形的边界,7.6多边形裁剪,44,S-H算法基本思想将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪步骤多边形由一系列顶点表示V1V2Vn按一定左上右下的次序依次裁剪;与左边所在直线裁剪的结果是上边的输入,依次类推输出为顶点序列,7.6.1Sutherland-Hodgman算法,亦称逐边裁剪算法,45,7.6.1Sutherland-Hodgman算法,裁剪线裁剪输入输出顶点序列V0V1V2V3V4.多边形与窗口每条边的裁剪裁剪线窗口边以及其延长线内侧空间与外侧空间包含裁剪窗口的半空间为内侧空间,否则为外侧空间,,,,,,,,,,,裁剪线,内侧空间,裁剪窗口,外侧空间,46,7.6.1Sutherland-Hodgman算法,多边形与窗口裁剪线的裁剪依据多边形的边SP与半空间的关系情况1同在内侧,裁剪后输出P情况2S在内侧,P在外侧,裁剪后输出交点i情况3同在外侧,裁剪后不输出情况4S在外侧,P在内侧,裁剪后输出交点i和P,47,,7.6.1Sutherland-Hodgman算法,算法将顶点序列P1P2Pn作为输入依次对窗口的每条裁剪线作下列处理输入顶点序列依次顶点序列中相邻顶点构成的边PiPi1进行裁剪处理输出顶点序列(下条裁剪线的输入),48,例子,7.6.1Sutherland-Hodgman算法,上输入I1P2P3P4P5P6P7P8I2输出P2I3I4P4P5P6P7P8I2I1,下输入I3I4P4I5I6P6P7P8I2I1P2输出I4P4I5I6I7I8P8I2I1P2I3,左输入P1P2P3P4P5P6P7P8输出I1P2P3P4P5P6P7P8I2,右输入P2I3I4P4P5P6P7P8I2I1输出I3I4P4I5I6P6P7P8I2I1P2,,注意(1)交点是边与裁剪线的交点(2)边的顶点是有序的,49,特点裁剪算法采用流水线方式,算法简单推广到任意凸多边形裁剪窗口原因是凸多边形的边能将平面空间分成2部分,其中一部分含裁剪窗口,7.6.1Sutherland-Hodgman算法,50,7.6.2Weiler-Athenton算法*,裁剪窗口为任意多边形(凸、凹、带内环)的情况主多边形被裁剪多边形,记为A裁剪多边形裁剪窗口,记为B,51,7.6.2Weiler-Athenton算法*,主多边形A被裁剪多边形B裁剪后内裁剪A∩B外裁剪A-B内裁剪的特点裁剪结果区域的边界由A的部分边界和B的部分边界两部分构成,并且在交点处边界发生交替,即由A的边界转至B的边界,或由B的边界转至A的边界,,,,,,,,,52,交点交点成对出现既在A中也在B中两类(1)进点主多边形边界由此进入裁剪多边形内如,I1,I3,I5,I7,I9,I11(2)出点主多边形边界由此离开裁剪多边形区域如,I0,I2,I4,I6,I8,I10,7.6.2Weiler-Athenton算法*,B,,A,,,,A是主多边形,53,内裁剪算法步骤1、建立主多边形和裁剪多边形的顶点表2、求主多边形和裁剪多边形的交点,并将这些交点按顺序插入两多边形的顶点表中。在两多边表形顶点表中的相同交点间建立双向指针,7.6.2Weiler-Athenton算法*,54,3、裁剪如果存在没有被跟踪过的交点,执行以下步骤1建立裁剪结果多边形的顶点表2选取任一没有被跟踪过的交点为始点,将其输出到结果多边形顶点表中3如果该交点为进点,跟踪主多边形边边界;否则跟踪裁剪多边形边界4跟踪多边形边界,每遇到多边形顶点,将其输出到结果多边形顶点表中,直至遇到新的交点5将该交点输出到结果多边形顶点表中,并通过连接该交点的双向指针改变跟踪方向(如果上一步跟踪的是主多边形边界,现在改为跟踪裁剪多边形边界;如果上一步跟踪裁剪多边形边界,现在改为跟踪主多边形边界)6重复4、5直至回到起点,7.6.2Weiler-Athenton算法*,55,,7.6.2Weiler-Athenton算法*,进点I1,I3,I5,I7,I9,I11,出点I0,I2,I4,I6,I8,I10,56,交点的奇异情况处理1、与裁剪多边形边重合的主多边形的边不参与求交点2、对于顶点落在裁剪多边形的边上的主多边的边,如果落在该裁剪边的内侧,将该顶点算作交点;而如果这条边落在该裁剪边的外侧,将该顶点不看作交点,7.6.2Weiler-Athenton算法*,57,基于字符串整个字符串完全落在窗口之内时显示,否则不显示字符串的矩形包围盒测试基于字符一个字符完全落在窗口之内时显示,否则不显示字符的矩形包围盒测试,7.7字符裁剪,58,7.7字符裁剪,基于构成字符的最小元素点阵字符点裁剪矢量字符线裁剪,59,二维观察流程观察变换窗口到视区的变换线段裁剪编码算法Liang-Barsky多边形裁剪逐边裁剪算法字符裁剪注意裁剪窗口为矩形算法的扩展性,小结,60,作业,1、简要说明二维观察的过程。窗口裁剪的作用是什么2、下图中,线段P1P2的两个端点为P1(1,3),P2(6,7),裁剪窗口为矩形ABCD,其中A点坐标为(2,2),C点坐标为(5,5),利用编码(Cohen-Sutherland)算法进行直线裁剪,写出按算法进行裁剪的过程。,61,作业,3、一多边形P0P1P2P3P4P5和裁剪窗口ABCD如图,试写出用逐次多边形裁剪(Sutherland-Hodgman)算法裁剪的过程。,62,图形裁剪功能线段和多边形的裁剪,保留窗口内的图形要求(1)裁剪窗口顶点坐标由鼠标输入(2)裁剪结果用红色绘制,上机题一补充,
展开阅读全文

资源标签

最新标签

长按识别或保存二维码,关注学链未来公众号

copyright@ 2019-2020“矿业文库”网

矿业文库合伙人QQ群 30735420