1、三维视图(三维观察),经典视图计算机视图投影矩阵,基本内容,介绍经典视图比较由计算机形成的图像与建筑师、画家和工程师绘制的图像学习每种视图的优势与不足,为什么需要经典视图?,传统由手工操作的制图工作现在可以用计算机模拟电影中的动画,建筑图纸,机器零件图纸这些领域中需要不同的经典视图等角投影(isometrics),正视图(elevation),透视经典视图与计算机视图之间的对比关系表明了在大多数API中所采用方法的长处,当然也具有一些不足和困难 经典照相机与合成照相机,经典视图,视图中需要三个基本要素一个或多个对象观察者,带有一个投影面从对象到投影平面的投影变换经典视图就是基于这些要素之间的关
2、系的观察者捡取一个对象并进行定向,确定希望看到的结果每个对象都假定是用平面的基本多边形构造出来的如:建筑物、多面体、锻造物,平面几何投影,即投影到平面上的标准投影投影线为直线,这些直线汇聚于投影中心,或者彼此平行这种投影保持共线性但不一定保角在诸如地图绘制等应用中需要非平面投影,经典投影,斜俯视图,基准面principal faces(主平面),在诸如建筑业等实际应用中,所观察的对象通常由许多平坦面构成。这些面中任一个都可以认为是一个基准面,从而进行定位对于规则物体,例如房屋,按照通常的方式可以定义前、后、左、右、顶、底等面许多对象上都有几个面相交于直角,从而可以得到三个正交的方向,称为基准方
3、向,透视投影与平行投影,计算机图形学中把所有的投影用同样的方法处理,用一个流水线体系实现它们在经典视图中为了绘制不同类型的投影,发展出来不同的技术基本区别在于平行投影和透视投影,虽然从数学上说,平行投影是透视投影的极限状态,平面几何投影的分类图,平面几何投影的分类图,投影平面是否平行于主平面,投影线与投影平面的夹角,投影中心与投影平面之间的距离,投影平面与基准坐标轴交点数,投影,投影的要素包括投影对象、投影中心、投影平面、投影线和投影。要作投影变换的物体称为投影对象;在三维空间中,选择一个点,记这个点为投影中心;不经过这个点再定义一个平面,记这个平面为投影平面;从投影中心向投影平面引任意多条射
4、线,记这些射线为投影线;穿过物体的投影线与投影面相交,在投影面上形成物体的像,这个像记为三维物体在二维投影面上的投影。,投影变换可分为两大类:透视投影和平行投影。它们的本质区别在于:透视投影的投影中心到投影面之间的距离是有限的,而平行投影的投影中心到投影面之间的距离是无限的。,真实感强,常用于工程制图图形不缩小,形状不变,透视投影的特点:1、透视缩小:物体离投影中心越远,则物体和所表现的长度越短。2、投影线汇聚一点。平行投影的特点:不缩小实际尺寸,形状不变,常用于工程制图。,透视投影,平行投影,平行投影的投影中心与投影平面之间的距离为无穷远;投影线之间相互平行;平行线的平行投影仍是平行线。按照
5、投影方向与投影平面的交角不同,平行投影分为两类:正平行投影和斜平行投影。,正平行投影,正平行投影的投影方向垂直于投影平面。按照投影平面与坐标轴的交角不同,正平行投影又可分为两类:正投影与正轴测。当投影平面与某一坐标轴垂直时,得到的投影为正投影;否则,得到的投影为正轴测。,多视点正交投影(三视图),投影面平行于基准面(主平面)通常从前面、顶部和侧面进行投影在CAD和建筑行业中,通常显示出来三个视点图以及等角投影图,等角投影图(不是多视点正交视图中的一部分),三视图:正视图、侧视图和俯视图,优势与不足,保持了距离与角度保持形状可以用来测量建筑规划手册不能看到对象真正的全局形状,因为许多面在视点中不
6、可见,(1)正投影正投影也称为三视图。按照投影平面是否与Y轴、X轴、Z轴垂直,正投影分为主视图、侧视图和俯视图三种,此时投影方向分别与这个坐标轴的方向一致。,主视,侧视,俯视,主视,侧视,俯视,轴测投影,投影线垂直与投影面但投影面不平行于主平面允许投影面相对于对象移动,轴测投影的示例,根据对立方体进行投影时与几个坐标轴之间夹角都相等进行分类没有:正三测 两个:正二测 三个:正等测,正等测,正二测,正三测,优势与不足,直线段长度被缩短(foreshortened),但可以求出收缩因子保持直线但不保角圆所在平面如果不平行于投影面,它的投影为椭圆可以见到盒子类对象的三个基准面会导致某些观察错觉平行线
7、看起来不平行 不是很真实,因为远的对象与近的对象具有同样的收缩因子在CAD应用中经常用到,斜平行投影,投影线与投影面之间的关系任意(不垂直),优势与不足,可以增加某个角度,以便强调特定面在平行于投影面的面上的角度保持不变(保角),但我们仍然可以见到其它侧面在实际世界中,只能利用特殊相机做到这一点,透视投影的投影中心与投影平面之间的距离为有限的。投影线(视线)从投影中心(视点)出发,投影线是不平行的。透视投影具有透视缩小性,不能真实反映物体的精确尺寸和形状。,透视投影,视点投影中心,图像平面,虚平面(投影平面/视平面),透视图是采用中心投影法,通过空间一点(投影中心)将三维形体投影到投影面上所得
8、到的投影图。,投影中心在坐标原点投影平面与Z轴垂直,在zd的位置上。点P(x,y,z)在投影平面上的投影点为:P(x,y,d),构造透视投影的变换矩阵T:,简单透视,透视方程,考虑顶部与侧边视图,齐次坐标形式,透视除法,如果w 1, 那么必须从齐次坐标中除以w而得到所表示的点这就是透视除法,结果为 上述方程称为透视方程,灭点(vanishing points),在对象上的所有平行线(不平行于投影面)投影后交于一个点手工绘制简单透视投影时就需要利用这些灭点特点:产生近大远小的视觉效果,由它产生的图形深度感强,看起来更加真实。,示例,三点透视,没有基准面平行于投影面投影面与与基准坐标轴有三个交点立
9、方体的投影中有三个灭点,两点透视,一个基准方向平行于投影面投影面与基准坐标轴有二个交点立方体的投影中有两个灭点,单点透视,一个基准面平行于投影平面投影面与基准坐标轴有一个个交点立方体的投影中有一个灭点,透视变换,透视除法是非线性的,导致非均匀缩短离COP远的对象投影后尺寸缩短得比离COP近的对象大看起来更真实透视变换是保直线的,但不是仿射变换只有在平行于投影面的平面上角度被保持透视变换是不可逆的,因为沿一条投影直线上的所有点投影后的结果相同,基本内容,介绍投影的数学表示介绍OpenGL中的视图函数查看其它类型API中的视图功能,计算机视图,视图有三个功能,都在流水线体系中实现定位照相机设置模型
10、视图矩阵设置镜头设置投影矩阵裁剪设置视景体,合成照相机,计算机视图是基于合成照相机的,原则上可以实现所有的经典视图所有的经典视图是基于对象、观察者和投影线之间的紧密联系的,而在计算机图形学中强调的则是对象定义与照相机定义之间的独立性在OpenGL中可以指定采用的是透视投影或者正交投影,但在透视投影中OpenGL并不知道什么是单点、两点或三点透视为了实现这些细节需要知道对象与照相机之间的关系,最终的选择,偏好对象定义与照相机定义之间的独立性如果应用程序需要特定类型的视图,那么应当仔细确定照相机相对于对象的位置,OpenGL中的照相机,在OpenGL中,初始的世界标架和照相机标架相同初始的模型视图
11、矩阵是单位阵照相机位于原点,并指向z轴的负向OpenGL也指定了默认的视景体,它是一个中心在原点的边长为2的立方体缺省的投影矩阵是单位阵,缺省投影,默认的投影是正交投影,定义可见的对象,在缺省的照相机设置下,为了使定义的对象可见,只要使对象的位置和尺寸与默认视景体相匹配通常可以对数据进行适当的平移和各向同性放缩注意这并不是利用OpenGL的平移和放缩函数进行的操作,移动照相机标架,如果想同时看到具有更大的正z坐标和负z坐标的对象,我们可以把照相机沿z轴正向移动平移照相机标架把对象沿z轴负向移动移动世界标架两者是完全等价的,都是由模型视图矩阵确定的需要平移glTranslated(0.0, 0.
12、0, -d);此处d 0,移动照相机,可以利用一系列旋转和平移把照相机定位到任意位置例如,为了得到侧视图旋转照相机: R把照相机从原点移开: T模型视图矩阵C = RT,OpenGL代码,注意最后指定的变换是最先被应用的变换glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslated(0.0, 0.0, -d);glRotated(90.0, 0.0, 1.0, 0.0);,模型视图矩阵,模型视图矩阵是OpenGL状态的一部分任何时刻的模型视图矩阵包含了照相机标架与世界标架的位置关系虽然表面上看把模型与视图矩阵结合为一个矩阵会导致一些混淆,但
13、仔细体会这种流水线体系就会发现其中的优势如果把照相机也看作具有几何属性的对象,那么改变对象位置和定向的变换当然对照相机的位置和定向相对于其它对象也发生改变可以认为在定义真正对象之前的模型视图变换是定位照相机,如何构造等角投影,假设从中心在原点的立方体开始,立方体平行于坐标轴希望移动照相机得到该立方体的等角投影首先绕y轴旋转45度然后绕x轴旋转35.26度最后从原点移开构造方法复杂,两个视图API,为了实现某种投影,需要经过复杂的计算得到变换的构成可以采用在PHIGS和GKS-3D中的方法定位照相机在世界标架中描述照相机的位置投影的类型是由在OpenGL中等价的投影矩阵确定的视图过程的这部分操作
14、也称为规范化变换(normalization transformation)用标架中的变换实现,照相机参数,照相机的默认位置在原点,指向z轴负向所期望的位置称为视图参考点VRP照相机定向视图平面法向n(viewplane normal, VPN)视线向上的方向VUP (view-up vector)VUP在投影平面的投影得到视线向上方向v,VPN & VUP,VPN给出投影面的方向,即平面的法向 只有平面的定向不能完全确定照相机的定向照相机还可以绕VPN方向旋转只有给出了VUP,才完全确定了视图的向上方向,VUP,不必要求VUP向量必定平行于投影面把VUP投影到投影平面上得到上方向量vv与n正
15、交设u = v x n由(u, v, n)构成的直角坐标系称为视图坐标系加上VRP,构成照相机标架实现这种变换的矩阵称为视图定向矩阵,LookAt()函数,在GLU库中包含了函数gluLookAt(),提供了创建定位照相机所用的模型视图矩阵的简单方法注意在设置中需要一个向上的方向需要初始化,即上载单位阵也可以与模型变换复合在一起例如:平行于轴的立方体的等角投影glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(1.,1.,1.,0.,0.,0.,0.,1.,0.);,gluLookAt(),gluLookAt(eyex, eyey, ey
16、ez, atx, aty, atz, upx, upy, upz);,gluLookAt()与其它变换,用户可以自己定义模型视图矩阵实现同样的功能但是从概念上可以把gluLookAt()作为照相机的定位,而把后续的其它变换作为对象的定位在OpenGL中gluLookAt()函数是唯一的专门用来定位照相机的函数,物理照相机,在定位后仍然可以选择镜头镜头与胶卷的大小结合在一起确定在照相机前面多大范围的对象出现在最终的照片上宽角镜头可以使离照相机近的对象看起来比离照相机远的对象夸张得大,远距镜头则会近似得到平行投影的效果,计算机中的照相机,可以选择投影的类型和视图参数模拟镜头的远近绝大多数API提供
17、不同的函数用于定义平行投影和透视投影OpenGL就是如此,虽然两者是在同一个流水线体系中实现用glLoadMatrix设置投影矩阵,投影与规范化,在视点(照相机)标架中默认的投影是正交投影对于在默认视景体内的点,xp = x, yp = y, zp = 0大多数图形系统应用视图规范化的过程通过由投影矩阵确定的变换把所有其它的视图转化为默认视图从而可以对所有的视图采用同样的流水线体系,投影流水线,在模型视图矩阵后应用4x4的投影矩阵实现简单的投影,但在最后需要进行透视除法透视除法可以成为流水线的一部分,视角(angle of view),视景体,若胶卷是矩形的,那么由视角张成一个半无穷的棱台,这
18、称为视景体其顶点就是COP但实际的视景体通常 有前后裁剪面不在视景体内的物体 被裁剪掉,四棱体(frustum),在绝大多数API中通过定义投影确定裁剪参数通过指定前后裁剪面以及视角可以确定一个四棱体作为视景体在这个指定中有一个参数是固定的,即COP在原点 可以定义四棱体的六个面差不多具有任意定向和位置,但这样很难确定视图,而且很少需要这种弹性,OpenGL的正交视图,glOrtho(xmin, xmax, ymin, ymax, near, far)glOrtho(left, right, bottom, top, near, far),OpenGL的透视,glFrustum(xmin, xmax, ymin, ymax, near, far),视野的应用,应用glFrustum有时很难得到所期望的结果gluPerspective(fovy, aspect, near, far)可以提供更好的界面,