




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第七章三维观察三维观察与观察流程三维观察坐标系投影变换三维裁剪算法1第七章三维观察三维观察与观察流程27.1三维观察与观察流程三维观察过程与使用照相机拍摄照片相类似。
观察平面对象定位场景范围成像照相自然景物设置相机位置、拍摄方向、相机的正向上方向改变相机焦距大小胶片三维观察三维虚拟场景设置三维观察坐标系选定观察体大小观察平面27.1三维观察与观察流程三维观察过程与使用照相机拍摄照片3利用计算机进行三维观察处理流程中所经过的一般过程如下:3DVC从应用程序得到对象的世界坐标变换到观察坐标系对观察空间的用户窗口进行裁剪投影变换到3D规范化的视区在图形设备上输出图形3DWC3DVC3DNDC变换到设备坐标空间DC3DMC7.1三维观察与观察流程3利用计算机进行三维观察处理流程中所经过的一般过程如下:3D47.2三维观察坐标系7.2.1三维观察坐标系定义观察坐标系的原点(称为观察参考点、观察位置或视点等)定义观察坐标系过程:
1.在世界坐标系中指定观察坐标系的原点2.将与观察平面垂直的观察方向定义为观察坐标系的轴
3.定义一个与观察平面法向量垂直的向量作为观察向上向量V,即轴的正方向。
4.计算出轴正方向向量,形成一个右手观察坐标系
xwywzwP0(x0,y0,z0)zviewyviewxview在世界坐标系中定义观察坐标系47.2三维观察坐标系7.2.1三维观察坐标系定义xwyw57.2三维观察坐标系定义观察平面通常在观察坐标系中定义一个平面用来作为裁剪窗口所在平面,即观察平面(或投影平面)。它与垂直,用一个标量设定观察平面在沿轴方向的位置,为从观察原点沿观察方向到观察平面的距离,常被设置在负方向。观察平面的方向用平面法向量N来定义,并与正轴同方向。观察平面总是与平面平行。定义用来确定正向的观察向上向量V
通常使用从世界坐标系原点到一选定点的有向线段来定义。
xwywzwP0zviewyviewxview观察平面N观察平面及其法向量的定义57.2三维观察坐标系定义观察平面xwywzwP0zvie67.2三维观察坐标系
由于确定与N精确垂直的向量V很困难,观察函数一般要调整向量V的方向,即通过将其投影到观察平面上得到与观察平面法向量垂直的向量作为V。在实际使用中往往将V定义为(0,1,0)
。N输入的V调整后的Vuvn观察坐标系单位向量n、v、u形成了一个右手观察坐标系的轴向量。67.2三维观察坐标系由于确定与N精确垂直的向量V77.2三维观察坐标系7.2.2世界坐标系向三维观察坐标系的变换将图形对象的描述转换到观察坐标系的变换等价于将观察坐标系与世界坐标系重合的变换。设观察坐标系的原点为P0(x0,y0,z0),定义观察坐标系的单位轴向量为u(ux,uy,uz)、v(vx,vy,vz)、n(nx,ny,nz)。则平移和旋转矩阵分别如下:
77.2三维观察坐标系7.2.2世界坐标系向三维观察坐标87.3投影变换投影变换是一种人们观察自然景物并以某种方式将其观察结果映射到平面介质的观察方式,投影分为两大类:平行投影(parallelprojection)和透视投影(perspectiveprojection)。AA´B´B´´投影平面投影线AB´A´B´´投影平面投影线(a)平行投影(b)透视投影投影中心
投影中心(投影参考点)、投影线、投影过程平行投影的特点是保持了对象的有关比例关系不变;而透视投影会产生同样大小的物体近大远小的视觉效果,真实感更强。87.3投影变换投影变换是一种人们观察自然景物并以某种方式97.3投影变换7.3.1平行投影平行投影可根据投影方向与投影面的夹角分为两类:正投影(orthogonalprojection,或正交投影,orthographicprojection),和斜投影(obliqueparallelprojection)。7.3.1.1正投影正投影根据投影平面与坐标轴的夹角不同分为:三视图和正轴侧图。yyyzxxzo(a)三维物体(b)物体的三视图俯视图侧视图主视图z97.3投影变换7.3.1平行投影yyyzxxzo(a107.3投影变换
三视图可以精确反映物体的尺寸、距离、角度及相互位置关系。正轴侧图有等轴侧、正二侧和正三侧三种。投影平面zxy投影平面zxy(a)等轴侧投影(b)正二侧投影(c)正三侧投影xzyyyxxzz投影平面xyz107.3投影变换三视图可以精确反映物体的尺寸、117.3投影变换7.3.1.2正投影变换在正投影方式中通常采用投影方向与z轴平行的方式,其变换公式如下:
x´=x,y´=y
z坐标值被保存起来,用于图形消隐算法的可见性检测等。7.3.1.3裁剪窗口及正投影观察体的建立裁剪窗口被定义在观察平面上,通常观察平面是一个二维直角坐标系,原点位于左下角处,并通过设置二维坐标左下角(xwmin,ywmin)和右上角(xwmax
,ywmax)顶点的位置来建立裁剪窗口,且裁剪窗口的边与观察坐标系的x、y轴平行。
(x,y,z)(x´,y´)zxy观察平面(xwmin,ywmin)zy观察平面x(xwmax,ywmax)裁剪窗口117.3投影变换7.3.1.2正投影变换(x,y,z)127.3投影变换定义正投影观察体
zview裁剪窗口无限正投影观察体的侧视图裁剪窗口近平面远平面yviewzviewxview观察平面位于近平面之前的有限正投影观察体7.3.1.4正投影的规范化变换规范化观察体:单位立方体、对称立方体,左手系(屏幕、规格化)。裁剪窗口由左下角(xwmin,ywmin)和右上角(xwmax,ywmax)顶点的位置来定义,近平面的z坐标值为znear,远平面的z坐标值为zfar。在从正投影观察体到对称规范化观察体的变换过程中,存在点(xwmin,ywmin,znear)到(-1,-1,-1)及(xwmax,ywmax,zfar)到(1,1,1)的映射关系。
127.3投影变换定义正投影观察体zview裁剪窗口无限137.3投影变换(xwmin,ywmin,znear)(xwmax,ywmax,zfar)(-1,-1,-1)(1,1,1)zviewxviewyviewznormxnormynorm利用从窗口到规范化正方形的变换方法,计算正投影观察体的规范化变换矩阵为:在规范化变换之后,即可进行图形的裁剪,并结合消隐、表面绘制和视区变换来生成最后的屏幕显示场景。137.3投影变换(xwmin,ywmin,znear)(147.3投影变换7.3.2透视投影1.透视投影观察体投影中心裁剪窗口投影参考点矩形棱台观察体远裁剪平面近裁剪平面裁减窗口汇聚点在投影中心的无限矩形棱锥观察体观察平面在近裁减平面之前的棱台透视投影观察体147.3投影变换7.3.2透视投影投影中心裁剪窗口投影157.3投影变换2.透视投影变换
yxzC(xc,yc,zc)观察平面OP(x,y,z)P`(x`,y`,zvp)右图为一个观察平面位于距观察坐标系原点距离为zvp,投影参考点位于C(xc,yc,zc)处的一般透视投影过程。P(x,y,z)为空间任意点,在观察平面上的投影点为P´(x´,y´,zvp)。透视投影线的参数方程如下:x´=x-(x-xc)·t,y´=y-(y-yc)·t,z´=z-(z-zc)·t0≤t≤1在观察平面上已知z´=zvp,从而可求出观察平面与投影线之间交点位置的参数t:t=(zvp-z)/(zc-z)x´=[x·(zc-zvp)+xc·(zvp-z)]/(zc-z),y´=[y·(zc-zvp)+yc·(zvp-z)]/(zc-z)157.3投影变换2.透视投影变换yxzC(xc,yc,z167.3投影变换一些特殊和简化的透视投影过程,如:(1)将投影参考点限定在观察坐标系的z轴上,则xc=yc=0,可得到如下变换公式:x´=x·(zc-zvp)/(zc-z),y´=y·(zc-zvp)/(zc-z)(2)将投影参考点限定在观察坐标系的原点上,则xc=yc=zc=0,可得到如下变换公式:x´=x·zvp/z,y´=y·zvp/z(3)若观察平面是xoy平面且对投影参考点的位置不加限制,则zvp=0,可得到如下变换公式:x´=(x·zc-xc·z)/(zc-z),y´=(y·zc-yc·z)/(zc-z)(4)若把xoy平面作为观察平面且投影参考点设定在观察坐标系的z轴上,则xc=yc=zvp=0,可得到如下变换公式:x´=x·zc/(zc-z),y´=y·zc/(zc-z)167.3投影变换一些特殊和简化的透视投影过程,如:177.3投影变换常用观察体一般有两类:对称的透视投影观察体和斜透视投影棱台。
远裁剪平面近裁剪平面观察平面裁剪窗口(xc,yc,zvp)(xc,yc,zc)棱台中心线从一个方向看的对称的透视投影观察体177.3投影变换常用观察体一般有两类:对称的透视投影观察187.3投影变换3.对称的透视投影观察体(xwmin,ywmin,zvp)高θ(xc,yc,zvp)(xwmax,ywmax,zvp)裁剪窗口投影参考点裁剪窗口zc-zvp(a)棱台中心线位于裁剪窗口中心(b)视场角与裁剪窗口高度关系对称透视投影观察体完全可由视场角、裁剪窗口的横纵比及从投影参考点到近和远裁剪平面的距离来确定。裁剪窗口的左下角和右上角的坐标位置与棱台中心点及窗口的高、宽之间存在如下关系:
xwmin=xc-宽度/2,xwmax=xc+宽度/2,ywmin=yc-高度/2,ywmax=yc+高度/2tg(θ/2)=(高度/2)/(zc-zvp)高度=2(zc-zvp)·tg(θ/2)宽度=横纵比×高度187.3投影变换3.对称的透视投影观察体(xwmin,y197.3投影变换4.透视投影的规范化变换在对称的透视投影观察体中透视投影变换会将棱台内部的坐标位置映射到矩形平行管道的正交投影坐标。
(xwmin,ywmin,znear)(xwmax,ywmax,zfar)(-1,-1,-1)(1,1,1)zxyznormxnormynorm裁剪窗口投影参考点规范化观察体197.3投影变换4.透视投影的规范化变换(xwmin,y207.3投影变换由于齐次矩阵表示如下:透视投影变换的规范化变换矩阵:207.3投影变换由于齐次矩阵表示如下:透视投影变换的规217.3投影变换因此,正交投影坐标为:x´=xh/h=[-znear·sx·x+sx·(xwmin+xwmax)/2]/(-z)y´=yh/h=[-znear·sy·y+sy·(ywmin+ywmax)/2]/(-z)z´=zh/h=(sz·z+tz)/(-z)在上式中由于投影参考点在观察坐标系原点(即zc=0),而h=zc-z,故h=-z。在规范化变换中矩形平行管道与规范化观察体之间存在这样的映射关系:位置点(xwmin,ywmin,znear)映射到位置点(-1,-1,-1),而位置点(xwmax,ywmax,zfar)映射到位置点(1,1,1)。将这两个边界条件代入上式中,可求得规范化变换中的缩放和平移因子:217.3投影变换因此,正交投影坐标为:x´=xh/h=[227.3投影变换一般简化的透视投影规范化变换矩阵如下:若所使用的透视投影观察体被指定为对称透视投影观察体,则可用视场角θ和裁剪窗口的横纵比aspect来改写上式中矩阵的部分元素,如下:227.3投影变换一般简化的透视投影规范化变换矩阵如下:237.3投影变换5.OpenGL三维观察函数设置三维观察流程的函数有5个,一个用来设置观察坐标系(视点)(gluLookAt),一个用来进行正交投影观察方式(glOrtho)设置,一个用于设置对称透视投影观察方式(gluPerspective),一个用于设置通用透视投影观察方式(glFrustum),一个用于设置矩形视区(glViewport)。voidgluLookAt(GLdoubleeyex,GLdoubleeyey,GLdoubleeyez,GLdoubleenterx,GLdoublecentery,GLdoublecenterz,GLdoubleupx,GLdoubleupy,GLdoubleupz);P(eyex,eyey,eyez)既是观察坐标系原点,也是投影中心点。该函数必须与glMatrixmode(GL_MODEVIEW)函数配合使用,完成所需的矩阵操作。237.3投影变换5.OpenGL三维观察函数设置三维观24voidgluPerspective(GLdoublefovy,GLdoubleaspect,GLdoublezNear,GLdoublezFar);创建一个对称透视视景体。参数fovy的范围是[0.0,180.0];参数aspect是裁剪窗口宽度与高度的比率;7.3投影变换voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublenear,GLdoublefar);创建一个正交平行投影矩阵,近裁剪平面与观察平面重合。近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left,bottom,-near),右上角点是(right,top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left,bottom,-far),右上角点是(right,top,-far)。
24voidgluPerspective(GLdouble25voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoubleznear,GLdoublezfar);创建一个对称棱台观察体或一个斜棱台观察体。函数的参数只定义近裁剪平面的左下角点和右上角点的三维空间坐标,即(left,bottom,-znear)和(right,top,-znear);最后一个参数zfar是远裁剪平面的Z负值,其左下角点和右上角点空间坐标由函数根据透视投影原理自动生成。
7.3投影变换示例程序:perspecconsole25voidglFrustum(GLdoubleleft26
7.4三维裁剪算法7.4.1三维Cohen-Sutherland线段裁剪算法在三维裁剪之前不管投影变换类型和观察体的形状如何均被转换成规范化观察体,并在其中进行三维裁剪处理。对称立方体的三维裁剪平面方程为:xwmin=-1,xwmax=1,ywmin=-1,ywmax=1,zwmin=-1,zwmax=1
三维Cohen-Sutherland线段裁剪算法与二维算法的不同主要表现为两点:(1)将区域编码扩展为6位,增加了近、远裁剪平面的对应位;(2)裁剪边界由原来的四个裁剪窗口边框扩展为包围观察体的六个平面。6个平面将整个裁剪空间划分为27个区域。假设现在按如下对应关系定义六位二进制数:267.4三维裁剪算法7.4.1三维Cohen-Suth27
7.4三维裁剪算法D0为1当且仅当区域在观察体上平面之上,即y>1;否则为0;D1为1当且仅当区域在观察体下平面之下,即y<-1;否则为0;D2为1当且仅当区域在观察体右平面之右,即x>1;否则为0;D3为1当且仅当区域在观察体左平面之左,即x<-1;否则为0;D4为1当且仅当区域在观察体近平面之前,即z<-1;否则为0;D5为1当且仅当区域在观察体远平面之后,即z>1;否则为0;分别求出线段的两个端点所在区域的编码(假设分别为code1和code2),再进行如下判断:如果code1和code2都等于0,说明两个端点都在观察体内部,那么该线段完全可见。277.4三维裁剪算法D0为1当且仅当区域在观察体上平面之28
7.4三维裁剪算法如果code1和code2的同一位为1,说明两
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论