版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1OpenGL 的观察取景的观察取景(Viewing and Projections)赵赵 星星首都师范大学检测成像重点实验室首都师范大学检测成像重点实验室20142014年年3 3月月2一、取景的基本过程一、取景的基本过程31.概述:相机类比概述:相机类比(1)模型变换 (modeling),调整被拍摄物的位置,朝向(2)视点变换 (viewing),调整视点的位置,朝向(3)投影变换 (projection),调整镜头(放大倍数,取景形状等)(4)视口变换 (viewport),根据视口决定照片形状42. 顶点变换过程顶点变换过程 为指定视点变换、模型变换和投影变换,需要建立一个44的矩阵
2、(M),然后将其与场景中每个顶点(v)的坐标相乘,来完成变换:v = Mv5视点总是个视点总是个4元坐标元坐标(x,y,z,w),虽然在大多数情况下,虽然在大多数情况下,w为为1,且对于二,且对于二维顶点,维顶点,z为为0。除顶点外,这些变换还将自动应用于法线向量,以确保法线向量和顶点除顶点外,这些变换还将自动应用于法线向量,以确保法线向量和顶点数据之间的关系保持不变。数据之间的关系保持不变。视点变换和模型变换将被合并,形成模型视点矩阵,并将其应用于物体视点变换和模型变换将被合并,形成模型视点矩阵,并将其应用于物体坐标,就得到视点坐标坐标,就得到视点坐标(eye coordinate)。投影矩
3、阵将定义的视景体以外的物体裁剪掉,经过投影除法投影矩阵将定义的视景体以外的物体裁剪掉,经过投影除法(perspective division),将坐标值除以,将坐标值除以w, 生成归一化的设备坐标。生成归一化的设备坐标。根据根据x坐标和坐标和y坐标,足以确定在屏幕上绘制哪些像素;然而,所有变换坐标,足以确定在屏幕上绘制哪些像素;然而,所有变换都将作用于都将作用于z坐标坐标. 这样,经过变换后,这样,经过变换后, z值将准确地反映顶点的深度值将准确地反映顶点的深度(离屏幕的距离),深度值的用途之一就是避免不必要的绘制工作。(离屏幕的距离),深度值的用途之一就是避免不必要的绘制工作。6. 通用变换
4、函数通用变换函数void glMatrixMode(GLenum mode)调用变换函数之前,必须指定需要修改的是模型视点矩阵还是投影调用变换函数之前,必须指定需要修改的是模型视点矩阵还是投影矩阵,为此用该函数选择要修改的矩阵。矩阵,为此用该函数选择要修改的矩阵。指定要修改的矩阵类型,参数指定要修改的矩阵类型,参数mode的取值为:的取值为:GL_MODELVIEW、GL_PROJECTION或者或者GL_TEXTURE;指定后,则接下来的变换;指定后,则接下来的变换函数将影响指定的矩阵。函数将影响指定的矩阵。注意,每次只能修改一种矩阵。默认情况下,模型视点矩阵处于被注意,每次只能修改一种矩阵
5、。默认情况下,模型视点矩阵处于被修改的状态,其他三种矩阵都为单位矩阵。修改的状态,其他三种矩阵都为单位矩阵。7void glLoadIdentity() 将当前可被修改的矩阵设置为一个将当前可被修改的矩阵设置为一个4 4的单位矩阵。的单位矩阵。void glLoadMatrixfd(const TYPE *m); 将当前矩阵中的将当前矩阵中的16个值设置为参数个值设置为参数m指定的值指定的值。void glMultMatrixfd(const TYPE *m); 将将m指定的指定的16元素矩阵乘以当前矩阵,并将结果作为当前矩阵元素矩阵乘以当前矩阵,并将结果作为当前矩阵。8Figure :先旋转
6、或者先平移先旋转或者先平移 二、模型变换和视点变换二、模型变换和视点变换 先看两种简单的变换:绕先看两种简单的变换:绕z轴逆时针旋转轴逆时针旋转45度的和沿度的和沿x轴平移。轴平移。 物体最初位于原点。如果先旋转再平移,变换后的物体将位于物体最初位于原点。如果先旋转再平移,变换后的物体将位于x轴轴上;但如果先沿着上;但如果先沿着x轴平移,再绕轴平移,再绕z轴旋转,物体将位于直线轴旋转,物体将位于直线y=x上。上。9. 模型变换模型变换移动、旋转或缩放来变换物体(或坐标系).1 平移平移void glTranslatefd(TYPEx, TYPE y, TYPEz); 将一个矩阵与当前矩阵相乘,
7、以便将物体(或局部坐标系)平移x,y 和z指定的矩阵。10. 旋转旋转void glRotatefd(TYPE Ang, TYPEx, TYPE y, TYPEz); 将一个矩阵与当前矩阵相乘,该矩阵将物体(或局部坐标系)绕原点到点(x,y,z)的直线逆时针旋转angle角度。物体离旋转轴越远,旋转半径越大,旋转后移动的距离越远。11图:图:glScalef(2.0, -0.5, 1.0) 的作用的作用. 缩放缩放void glScalefd(TYPEx, TYPE y, TYPEz); 将一个矩阵与当前矩阵相乘,该矩阵将物体缩放或沿着坐标轴反射物体。物体上每个点的坐标都乘以参数x,y和z.1
8、2Figure : 物体和视点都在原点2. 视点变换视点变换改变视点的位置和方向。视点变换通常改变视点的位置和方向。视点变换通常由平移和旋转组成。由平移和旋转组成。模型变换中将物体反时针旋转时,相当模型变换中将物体反时针旋转时,相当于在视点变换中将相机顺时针旋转。于在视点变换中将相机顺时针旋转。由于视点默认位于原点,同时为了简单由于视点默认位于原点,同时为了简单起见,通常在原点处构建物体,因此必起见,通常在原点处构建物体,因此必须进行一些变换,以便能够看到物体。须进行一些变换,以便能够看到物体。13Figure :使视点远离物体:使视点远离物体最简单的方式是:将视最简单的方式是:将视点后移,使
9、之远离物体;点后移,使之远离物体;这相当于将物体前移,这相当于将物体前移,使之远离视点。使之远离视点。glTranslatef(0.0, 0.0, -5.0); 将场景中的物体沿将场景中的物体沿z轴负方向移动轴负方向移动5个单位,个单位,这相当于将相机沿这相当于将相机沿z轴正轴正方向移动方向移动5个单位。个单位。14三三. 透视变换透视变换1. 透视投影透视投影投影变换旨在定义视景体。投影变换旨在定义视景体。视景体的用途有两个视景体的用途有两个: (1) 决定了物体将被如何投影到屏幕上,决定了物体将被如何投影到屏幕上,即使用透视投影还是正交投影。即使用透视投影还是正交投影。(2) 决定了哪些物
10、体或物体的哪决定了哪些物体或物体的哪些部分将被裁剪掉。些部分将被裁剪掉。调用投影函数之前,需要调用下面两个函数:调用投影函数之前,需要调用下面两个函数: glMatrixMode(GL_PROJECTION); glLoadIdentity(); 透视投影最显著的特征是:物体离相机越远,在图像上就显得透视投影最显著的特征是:物体离相机越远,在图像上就显得越小。越小。因为投影投影的视景体是一个棱锥台;因为投影投影的视景体是一个棱锥台;这种方法与人眼和相机的工作原理类似,因此常被用于动画、这种方法与人眼和相机的工作原理类似,因此常被用于动画、视觉模拟以及试图实现真实感的应用程序中。视觉模拟以及试图
11、实现真实感的应用程序中。15glFrustum() 指定的透视视景体void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); 作用:建立一个用于透视投影的矩阵,并乘以当前矩阵。作用:建立一个用于透视投影的矩阵,并乘以当前矩阵。Frustum函数的视景体由参数:函数的视景体由参数: (left, bottom, -near) 和和 (right, top, -near) 左左下角和右上角的下角和右上角的(x, y, z) 坐标;坐标;near
12、 和和 far 给定视点(给定视点( viewpoint )的近裁剪的近裁剪 (clipping)面和远裁剪面和远裁剪 (clipping)面面. 应该总是为正。应该总是为正。16gluPerspective() 指定的透视视景体17正交投影视景体2. 正交投影正交投影18void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); 创建一个与指定的正交平行视景体对应的矩阵,并将其与当前矩阵相乘。(left, bottom, -near)和(rig
13、ht, top, -near)分别是近裁剪面的视区窗口左下角和右上角点:而(left, bottom, -far)和(right, top, -far)分别是远裁剪面上视区窗口左下角和右上角点。1920四四. 视口变换视口变换 视口是窗口中用于绘制图像的矩形区域。视口是窗口中用于绘制图像的矩形区域。 视口变换相当于选择照片的大小:如希望照片如钱包那么大还是视口变换相当于选择照片的大小:如希望照片如钱包那么大还是象海报那么大。象海报那么大。21 定义视口定义视口缺省情况下,视口为窗口中的整个像素矩形。要指定更小的绘图区缺省情况下,视口为窗口中的整个像素矩形。要指定更小的绘图区域,可以使用函数域,
14、可以使用函数glViewport(); void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); 在窗口中指定一个用于显示图像的像素矩形。参数(x,y)是视口左下角的(在第一象限内,以(0,0)为原点的)坐标,而参数width和height为视口的大小。22例如,可以在通过划分窗口来实现多画面效果,在同一例如,可以在通过划分窗口来实现多画面效果,在同一个窗口中显示多个视图。个窗口中显示多个视图。23五、使用三角函数计算视野五、使用三角函数计算视野 即使相机的朝向正确,可即使相机的朝向正确,可以看到物体,物体还是可以看到物体,物体还是可能显得太大或者太小。能显得太大或者太小。 如果使用函数如果使用函数gluPerpective(),则需要调,则需要调整其第一个参数的值,来整其第一个参数的值,来改变定义视野的角度。改变定义视野的角度。24六六. 矩阵堆栈操作矩阵堆栈操作矩阵堆栈对于构造层次模型很有用。在层次模型中,复杂的物体是由简单物体组成的。由于变换是以矩阵方式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年电动叉车安全操作规程标准
- 传染病防控的健康教育制度
- 2026年工程造价职业生涯规划报告
- 2026年银行迎新年活动方案策划书
- 数字化技术在建筑施工过程中的应用
- 思维的语言操作
- 2026关于茶业的面试题及答案
- 数学五年级下册公开课教案
- 2026红旗渠面试题及答案
- 苏教版小学数学五年级下册《因数与倍数》作业设计
- 2026年江苏省无锡市重点学校高一数学分班考试试题及答案
- 2026黑龙江大庆市人力资源和社会保障局所属事业单位选调1人笔试参考试题及答案详解
- 屋面排水管施工要点方案
- 2026广西北海供电局项目资料员招聘20人备考题库(典优)附答案详解
- 成都十一中学2025初一入学语文分班考试真题含答案
- 2026年新疆昌吉回族自治州阜康市社区工作者招聘考试试卷-含答案解析
- 2026年广元市中考数学试卷
- 地下室工程有限空间作业专项施工方案
- 2026年全国出版专业职业资格考试(中级)真题题库(含答案)
- 2026年新闻记者职业资格考试真题及答案(北京)
- 2026年湖南湘江新区发展集团有限公司校园招聘笔试模拟试题及答案解析
评论
0/150
提交评论