资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ppt课件.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ppt课件.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ppt课件.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ppt课件.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ppt课件.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,二级,三级,四级,五级,ppt课件.,*,OpenGL,图形编程,1,ppt课件.,OpenGL图形编程1ppt课件.,3.OpenGL,二维观察与三维变换,3.1,二维观察,3.2,三维变换,2,ppt课件.,3.OpenGL二维观察与三维变换3.1二维观察2ppt课,3.1OpenGL,二维观察,3,实现二维观察的步骤:,3.1.1,指定矩阵堆栈,3.1.2,指定裁剪窗口,3.1.3,指定视区,3,ppt课件.,3.1OpenGL二维观察3实现二维观察的步骤:3ppt课,3.1.1,指定矩阵堆栈,4,指定当前操作的是投影矩阵堆栈,glMatrixMode,(,GL_PROJECTION,),;,初始化,即指定当前操作的矩阵堆栈的栈顶元素为单位矩阵。,glLoadIdentity(),;,4,ppt课件.,3.1.1指定矩阵堆栈4指定当前操作的是投影矩阵堆栈4ppt,3.1.2,指定裁剪窗口,5,定义二维裁剪窗口,gluOtho2D(xwmin,xwmax,ywmin,ywmax);,其中,双精度浮点数,xwmin,xwmax,ywmin,ywmax,分别对应裁剪窗口的左、右、下、上四条边界。,默认的裁剪窗口,四条边界分别为,wxl=-1.0,wxr=1.0,wyt=-1.0,wyb=1.0,。,5,ppt课件.,3.1.2指定裁剪窗口5定义二维裁剪窗口5ppt课件.,3.1.3,指定视区,6,指定视区,glViewPort,(,xvmin,,,yvmin,,,vpWidth,,,vpHeighht,);,xvmin,和,yvmin,指定了对应于屏幕上显示窗口中的矩形视区的左下角坐标,单位为像素。,整型值,vpWidth,和,vpHeighht,则指定了视区的宽度和高度。,默认的视区大小和位置与显示窗口保持一致。,6,ppt课件.,3.1.3指定视区6指定视区6ppt课件.,3.1OpenGL,二维观察,例子,教材,【,程序,6-2】,7,ppt课件.,3.1OpenGL二维观察例子7ppt课件.,3.2.1,变换种类,3.2.2,模型视图矩阵,3.2.3,矩阵操作,3.2.4,矩阵堆栈,3.2.5,投影变换,3.2.6,剪切变换,8,3.2OpenGL,中的变换,8,ppt课件.,3.2.1变换种类83.2OpenGL中的变换8ppt课件.,视图变换:,指定观察者或摄影机的位置;,模型变换:,在场景中移动对象;,模型视图变换:,描述视图变换与模型变换的对偶性;,投影变换:,对视见空间进行修剪和改变大小;,视见区变换:,对窗口的最终输出进行缩放;,9,3.2.1,变换种类,9,ppt课件.,视图变换:指定观察者或摄影机的位置;93.2.1变换种类9p,视图变换:,指定观察者或摄影机的位置;,视图变换是第一个应用到场景上的变换。它用于确定场景的有利位置。默认情况下,观察点位于原点,顺着,z,轴的负向看。视图变换使你可以将观察点放置在任何期望的位置上,从任何方向进行观察。确定视图变换相当于在场景中放置一部摄像机并确定其指向。,在工作时间表上,必须先指定视图变换再指定其他任何变换。,10,3.2.1,变换种类,10,ppt课件.,视图变换:指定观察者或摄影机的位置;103.2.1变换种类1,模型变换:,在场景中移动对象;,模型变换用于处理模型和模型内的特定对象。这些变换把对象移动到合适的位置,旋转它们,并对它们进行缩放。模型变换实际上就是几何变换。,11,3.2.1,变换种类,11,ppt课件.,模型变换:在场景中移动对象;113.2.1变换种类11ppt,模型视图变换:,描述视图变换与模型变换的对偶性;,从内部效果和它们对场景最终外观的效果来说,视图变换和模型变换是相同的,把这两者分开完全是为了程序员的方便,向后移动对象和向前移动参考系之间并没有本质差别。术语“模型视图”表示你可以把这类变换视为模型变换或视图变换,但实际上并无区别,因此称它为模型视图变换。,12,3.2.1,变换种类,12,ppt课件.,模型视图变换:描述视图变换与模型变换的对偶性;123.2.1,投影变换:,对视见空间进行修剪和改变大小;,投影变换应用到最终的模型视图方向。投影实际上定义了视见空间并建立了修剪平面。更明确一些,投影变换指定已完成场景如何转换成屏幕上的最终图象。常用的投影变换包括 正投影和透视投影。,13,3.2.1,变换种类,13,ppt课件.,投影变换:对视见空间进行修剪和改变大小;133.2.1变换种,视见区变换:,对窗口的最终输出进行缩放;,把场景的一个二维投影映射到屏幕上某处的窗口。这个到物理窗口坐标的映射是最后完成的一项变换,它称为视见区变换。,14,3.2.1,变换种类,14,ppt课件.,视见区变换:对窗口的最终输出进行缩放;143.2.1变换种类,在计算机图形学中,所有的变换都是通过矩阵乘法来实现的,即将物体顶点构成的齐次坐标矩阵乘以三维变换矩阵就得到了变换后的物体顶点的齐次坐标矩阵,这样只要求出物体的三维变换矩阵,就可以得到变换后的物体。,在,OpenGL,中,对象的坐标变换也通过矩阵来实现的(虽然并不一定要自己定义矩阵)。通常,在,OpenGL,中使用了两个重要的矩阵:模型视图矩阵和投影矩阵,其中模型视图矩阵用于物体的模型视图变换,投影矩阵用于投影变换。,15,3.2.1,变换种类,15,ppt课件.,在计算机图形学中,所有的变换都是通过矩阵乘法来实现的,即将物,有了模型视图矩阵和投影矩阵,在,OpenGL,中从未加工的顶点数据到屏幕坐标的过程就包括如下步骤:,1.,将顶点坐标转换为规范化齐次坐标矩阵;,2.,将顶点的规范化齐次坐标矩阵乘以模型视图矩阵,生成变换后的顶点齐次坐标矩阵;,3.,将变换后的顶点齐次坐标矩阵乘以投影矩阵,生成修剪坐标矩阵,这样就有效地排除了视见空间之外的所有数据。,4.,由修剪坐标除以,w,坐标,得到规格化的设备坐标。注意,在变换过程中,模型视图矩阵和投影视图矩阵都有可能改变坐标的,w,值。,5.,坐标三元组被视见区变换影射到一个,2D,平面。这也是一个矩阵变换,但在,OpenGL,中不能直接指定或修改它,系统会根据指定给,glViewport,的值在内部设置它。,16,3.2.1,变换种类,16,ppt课件.,有了模型视图矩阵和投影矩阵,在OpenGL中从未加工的顶点数,模型视图矩阵用于指定场景的视图变换和几何变换,模型视图矩阵是一个,44,的矩阵,它代表了用来放置和定位对象的经过变换的坐标系。,在计算机图形学中,物体进行的几何变换可以分解成多个基本几何变换,而三维几何变换矩阵是多个基本几何变换矩阵相乘的结果。,OpenGL,提供了一些函数用于把任意矩阵设置成当前操作的矩阵(模型视图矩阵或投影矩阵)。,17,3.2.2,模型视图矩阵,17,ppt课件.,模型视图矩阵用于指定场景的视图变换和几何变换,模型视图矩阵是,glfloat m=1.0f,0.0f,3.0f,0.0f,0.0f,1.0f,0.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.0f,0.0f,0.0f,1.0f,;,glMatrixMode(GL_MODELVIEW);,glLoadMatrixf(m);,这段程序中,先声明了一个数组来保存,44,矩阵的值,注意这里矩阵按列优先顺序保存,这意味着先从上往下遍历每一列;,然后使用,glLoadMatrix,函数将定义的矩阵设置为当前操作的矩阵。,18,3.2.2,模型视图矩阵,18,ppt课件.,glfloat m=1.0f,0.0f,3.0,如果需要执行变换,即把定义的矩阵乘到模型视图矩阵中。,可以使用函数,glMultmatrix,,其函数原型如下:,void glMultMatrixfd(const TYPE*m);,参数,m,为一个以列优先顺序保存,16,个连续值的数组。,19,3.2.2,模型视图矩阵,19,ppt课件.,如果需要执行变换,即把定义的矩阵乘到模型视图矩阵中。193.,平移,旋转,比例,20,3.2.2,模型视图矩阵,20,ppt课件.,平移203.2.2模型视图矩阵20ppt课件.,平移,void glTranslatefd(TYPE x,TYPE y,TYPE z);,参数,x,y,z,就是目标分别沿三个轴的正向平移的偏移量。这个函数用这三个偏移量生成的矩阵完成乘法。,当参数是,(0.0,0.0,0.0),时,生成的矩阵是单位矩阵,此时对物体没有影响。,21,3.2.2,模型视图矩阵,21,ppt课件.,平移213.2.2模型视图矩阵21ppt课件.,旋转,void glRotatefd(TYPE angle,,,TYPE x,,,TYPE y,,,TYPE z),;,函数中第一个参数是表示目标沿从原点到指定点,(x,y,z),的方向矢量逆时针旋转的角度,后三个参数则是指定旋转方向矢量的坐标。这个函数表示用这四个参数生成的矩阵完成乘法。,当角度参数是,0.0,时,表示对物体没有影响。,22,3.2.2,模型视图矩阵,22,ppt课件.,旋转223.2.2模型视图矩阵22ppt课件.,比例,void glScalefd(TYPE x,,,TYPE y,,,TYPE z),;,三个参数值就是目标分别沿三个轴向缩放的比例因子。这个函数用这三个比例因子生成的矩阵完成乘法。,这个函数能完成沿相应的轴对目标进行拉伸、压缩和反射三项功能。,当参数是,(1.0,1.0,1.0),时,对物体没有影响。,当其中某个参数为负值时,表示将对目标进行相应轴的反射变换,且这个参数不为,1.0,,则还要进行相应轴的缩放变换。,最好不要令三个参数值都为零,这将导致目标沿三轴都缩为零。,23,3.2.2,模型视图矩阵,23,ppt课件.,比例233.2.2模型视图矩阵23ppt课件.,3.2.2,模型视图矩阵,视图变换函数(定义观察坐标系),void gluLookAt,(,GLdouble eyex,,,GLdouble eyey,,,GLdouble eyez,,,GLdouble centerx,,,GLdouble centery,,,GLdouble centerz,,,GLdouble upx,,,GLdouble upy,,,GLdouble upz,);,视点位置:(,eyex,eyey,eyez),参考点位置:(,centerx,centery,centerz),向上矢量方向:,(upx,upy,upz),24,ppt课件.,3.2.2模型视图矩阵视图变换函数(定义观察坐标系)24pp,3.2.2,模型视图矩阵,例子,红皮书,cube.c,model.c,25,ppt课件.,3.2.2模型视图矩阵例子25ppt课件.,26,3.2.3,矩阵操作,矩阵堆栈选择,glMatrixMode(GLenum mode);,参数,mode,用于确定将哪个矩阵堆栈用于矩阵操作。,GL_MODELVIEW:,模型视图矩阵堆栈,GL_PROJECTION:,投影矩阵堆栈,GL_TEXTURE:,纹理矩阵堆栈,26,ppt课件.,263.2.3矩阵操作矩阵堆栈选择26ppt课件.,27,3.2.3,矩阵操作,通过上述的高级矩阵函数,可以很方便地实现变换。,问题:在调用函数时,修改的是当前的
展开阅读全文