OpenGL图形编程3二维观察与三维变换(陈永强)ppt课件.ppt
《OpenGL图形编程3二维观察与三维变换(陈永强)ppt课件.ppt》由会员分享,可在线阅读,更多相关《OpenGL图形编程3二维观察与三维变换(陈永强)ppt课件.ppt(46页珍藏版)》请在三一办公上搜索。
1、1,OpenGL图形编程,武汉纺织大学数学与计算机学院,授课教师:陈永强 教授,2,3. OpenGL二维观察与三维变换,3.1二维观察3.2三维变换,3,3,3. 1OpenGL二维观察,实现二维观察的步骤:3.1.1指定矩阵堆栈3.1.2指定裁剪窗口3.1.3指定视区,4,4,3.1.1指定矩阵堆栈,指定当前操作的是投影矩阵堆栈glMatrixMode(GL_PROJECTION);初始化,即指定当前操作的矩阵堆栈的栈顶元素为单位矩阵。 glLoadIdentity();,5,5,3.1.2指定裁剪窗口,定义二维裁剪窗口gluOtho2D(xwmin, xwmax, ywmin, ywma
2、x);其中,双精度浮点数xwmin, xwmax, ywmin, ywmax分别对应裁剪窗口的左、右、下、上四条边界。默认的裁剪窗口,四条边界分别为wxl=-1.0, wxr=1.0,wyt=-1.0,wyb=1.0。,6,6,3.1.3指定视区,指定视区glViewPort(xvmin,yvmin,vpWidth,vpHeighht);xvmin和yvmin指定了对应于屏幕上显示窗口中的矩形视区的左下角坐标,单位为像素。整型值vpWidth和vpHeighht则指定了视区的宽度和高度。默认的视区大小和位置与显示窗口保持一致。,7,3. 1OpenGL二维观察,例子教材【程序6-2】,8,8,
3、3.2.1变换种类3.2.2模型视图矩阵3.2.3矩阵操作3.2.4矩阵堆栈3.2.5投影变换3.2.6剪切变换,3.2OpenGL中的变换,9,9,视图变换:指定观察者或摄影机的位置;模型变换:在场景中移动对象;模型视图变换:描述视图变换与模型变换的对偶性;投影变换:对视见空间进行修剪和改变大小;视见区变换:对窗口的最终输出进行缩放;,3.2.1变换种类,10,10,视图变换:指定观察者或摄影机的位置;视图变换是第一个应用到场景上的变换。它用于确定场景的有利位置。默认情况下,观察点位于原点,顺着z轴的负向看。视图变换使你可以将观察点放置在任何期望的位置上,从任何方向进行观察。确定视图变换相当
4、于在场景中放置一部摄像机并确定其指向。 在工作时间表上,必须先指定视图变换再指定其他任何变换。,3.2.1变换种类,11,11,模型变换:在场景中移动对象;模型变换用于处理模型和模型内的特定对象。这些变换把对象移动到合适的位置,旋转它们,并对它们进行缩放。模型变换实际上就是几何变换。,3.2.1变换种类,12,12,模型视图变换:描述视图变换与模型变换的对偶性;从内部效果和它们对场景最终外观的效果来说,视图变换和模型变换是相同的,把这两者分开完全是为了程序员的方便,向后移动对象和向前移动参考系之间并没有本质差别。术语“模型视图”表示你可以把这类变换视为模型变换或视图变换,但实际上并无区别,因此
5、称它为模型视图变换。,3.2.1变换种类,13,13,投影变换:对视见空间进行修剪和改变大小;投影变换应用到最终的模型视图方向。投影实际上定义了视见空间并建立了修剪平面。更明确一些,投影变换指定已完成场景如何转换成屏幕上的最终图象。常用的投影变换包括 正投影和透视投影。,3.2.1变换种类,14,14,视见区变换:对窗口的最终输出进行缩放;把场景的一个二维投影映射到屏幕上某处的窗口。这个到物理窗口坐标的映射是最后完成的一项变换,它称为视见区变换。,3.2.1变换种类,15,15,在计算机图形学中,所有的变换都是通过矩阵乘法来实现的,即将物体顶点构成的齐次坐标矩阵乘以三维变换矩阵就得到了变换后的
6、物体顶点的齐次坐标矩阵,这样只要求出物体的三维变换矩阵,就可以得到变换后的物体。在OpenGL中,对象的坐标变换也通过矩阵来实现的(虽然并不一定要自己定义矩阵)。通常,在OpenGL中使用了两个重要的矩阵:模型视图矩阵和投影矩阵,其中模型视图矩阵用于物体的模型视图变换,投影矩阵用于投影变换。,3.2.1变换种类,16,16,有了模型视图矩阵和投影矩阵,在OpenGL中从未加工的顶点数据到屏幕坐标的过程就包括如下步骤: 1. 将顶点坐标转换为规范化齐次坐标矩阵; 2. 将顶点的规范化齐次坐标矩阵乘以模型视图矩阵,生成变换后的顶点齐次坐标矩阵; 3. 将变换后的顶点齐次坐标矩阵乘以投影矩阵,生成修
7、剪坐标矩阵,这样就有效地排除了视见空间之外的所有数据。4. 由修剪坐标除以w坐标,得到规格化的设备坐标。注意,在变换过程中,模型视图矩阵和投影视图矩阵都有可能改变坐标的 w 值。 5. 坐标三元组被视见区变换影射到一个2D平面。这也是一个矩阵变换,但在OpenGL中不能直接指定或修改它,系统会根据指定给 glViewport 的值在内部设置它。,3.2.1变换种类,17,17,模型视图矩阵用于指定场景的视图变换和几何变换,模型视图矩阵是一个44的矩阵,它代表了用来放置和定位对象的经过变换的坐标系。在计算机图形学中,物体进行的几何变换可以分解成多个基本几何变换,而三维几何变换矩阵是多个基本几何变
8、换矩阵相乘的结果。OpenGL提供了一些函数用于把任意矩阵设置成当前操作的矩阵(模型视图矩阵或投影矩阵)。,3.2.2模型视图矩阵,18,18,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函数将定义的矩阵设置为当
9、前操作的矩阵。,3.2.2模型视图矩阵,19,19,如果需要执行变换,即把定义的矩阵乘到模型视图矩阵中。可以使用函数 glMultmatrix,其函数原型如下: void glMultMatrixfd(const TYPE *m); 参数 m 为一个以列优先顺序保存16个连续值的数组。,3.2.2模型视图矩阵,20,20,平移 旋转 比例,3.2.2模型视图矩阵,21,21,平移void glTranslatefd(TYPE x,TYPE y,TYPE z);参数x,y,z就是目标分别沿三个轴的正向平移的偏移量。这个函数用这三个偏移量生成的矩阵完成乘法。当参数是(0.0,0.0,0.0)时,生
10、成的矩阵是单位矩阵,此时对物体没有影响。,3.2.2模型视图矩阵,22,22,旋转void glRotatefd(TYPE angle,TYPE x,TYPE y,TYPE z );函数中第一个参数是表示目标沿从原点到指定点(x,y,z)的方向矢量逆时针旋转的角度,后三个参数则是指定旋转方向矢量的坐标。这个函数表示用这四个参数生成的矩阵完成乘法。当角度参数是 0.0 时,表示对物体没有影响。,3.2.2模型视图矩阵,23,23,比例void glScalefd(TYPE x,TYPE y,TYPE z);三个参数值就是目标分别沿三个轴向缩放的比例因子。这个函数用这三个比例因子生成的矩阵完成乘法
11、。这个函数能完成沿相应的轴对目标进行拉伸、压缩和反射三项功能。当参数是(1.0,1.0,1.0)时,对物体没有影响。当其中某个参数为负值时,表示将对目标进行相应轴的反射变换,且这个参数不为1.0,则还要进行相应轴的缩放变换。最好不要令三个参数值都为零,这将导致目标沿三轴都缩为零。,3.2.2模型视图矩阵,24,3.2.2模型视图矩阵,视图变换函数(定义观察坐标系)void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez, GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGL 图形 编程 二维 观察 三维 变换 陈永强 ppt 课件
链接地址:https://www.31ppt.com/p-2003941.html