CAD(计算机辅助设计技术)第8章:三维形体显示.ppt
第8章 三维形体的显示,8.1 三维形体输出流程图 8.2 观察坐标系的建立 8.3 观察变换 8.4 投影变换 8.5 观察体与三维裁剪 8.6 三维形体完整的输出过程,8.1 三维形体输出流程图,1.三维形体显示与二维物体显示存在许多不同的地方:(1)允许从任意空间位置观察物体:从前面、上面和后面。也可以从一组物体的中间或一个物体的内部观察物体,如建筑物。(2)三维物体必须投影到二维的显示(输出)设备上。(3)裁剪空间是体空间。,2.观察流水线,用计算机模拟三维形体显示的步骤与照相机拍照的过程有点相似,但更加灵活,选择多样。下图描述了将用户坐标系中描述的物体转换成设备坐标的过程。,造型坐标,造型变换,用户坐标,观察变换,观察坐标,投影变换,投影坐标,工作站变换,设备坐标,8.2 观察坐标系的建立,我们可以在任意地点、任意距离和任意角度给物体拍照,并通过相机的孔径大小选择拍摄自己感兴趣的部分。类似地,给定观察位置、方向及“相机”的孔径大小,我们可以用图形软件包在二维平面上显示三维物体。基本思路是建立一个满足左手坐标系法则的观察坐标系。,xv,zv,yv,u,v,n,建立观察坐标系的步骤:1.在用户坐标系中选取一点P0作为观察坐标系的原点,该点称为观察参考点。,选取zv轴的正向 在景物附近或景物上取一点P,将N=P0P(表示矢量)选为zv轴的正向。这里,N称为观察方向。,xw,yw,zw,P0,P,zv,3.确定yv轴的正向。方法如下:选取一个观察正向V,将它投射到过P0并与N垂直的平面上。注意:可任意选取不与N平行的V。,补充说明:选定V后,建立yv和xv轴的另一种方法是:由N,V作叉积求出第三个向量U,它垂直于N和V,由此确定xv轴。然后由N和U作叉积确定与它们垂直的向量 v。,zv,zv,P0,V,yv,xv,u,n,zv,P0,V,yv,N,P0,V,yv,xv,uvn系统,观察平面的选取:与zv轴垂直即与xvyv平面平行的平面。,xv,zv,yv,8.3 用户坐标系到观察坐标系的变换观察变换,观察坐标系由用户坐标系中的观察参考点P0、观察方向N和观察正向V定义。设,记N与V的单位向量为,则,zv,P0,V,yv,xv,u,n,a,uvn系统,于是,根据第7 章坐标变换公式,可得观察变换为:,即,xw,yw,zw,P0,P,zv,yv,xv,8.4 投影变换,三维物体和二维显示平面不匹配的问题可通过投影变换解决,也就是把三维物体先变换到二维投影平面,然后再变换到显示屏表面。一旦将物体的用户坐标转换成观察坐标,我们就可以将三维物体投射到二维观察平面上。存在两种基本的投射方法:透视投射和平行投射。,P1,P2,P2,P1,观察平面(投影平面),投射参考点(视点)(投影中心),透视投影:坐标点沿着相交于一点(称为投射参考点 或投射中心)的直线被变换到观察平面。,P1,P2,P2,P1,观察平面(投影平面),平行投射(影):坐标点沿着平行线被变换到观察平面。,两类投影的本质区别在于:透视投影的投影中心到投影平面的距离是有限的,而平行投影的投影中心到投影平面的距离是无限的。两类投影的联系在于:当投影中心在无穷远处,投影线互相平行,这时透视投影变成平行投影。定义平行投影时,给出投影方向(称为投影向量)就可以了,而定义透视投影时,需要明确地指定投影中心的位置。,8.4.1 平行投影,根据投影向量与投影平面的夹角不同,平行投影可分为正交平行投影和斜平行投影。当投影向量与投影平面垂直时,称为正交平行投影,否则称为斜平行投影。,正交平行投影的变换方程很容易求出。假设观察平面位于zv轴上的zvp处,投射方向与zv轴平行(如下图所示),则观察坐标系中的任意点(x,y,z)被变换为观察平面上的坐标点(x,y,zvp),而原来的z坐标值保存起来,用作深度检测和可见面确定过程中的深度信息。,zv,xv,yv,(x,y,z),(x,y),zvp,当zvp=0,即投影平面为xvyv坐标平面时,zp=0。这时正交平行投影的矩阵表达式为:,8.4.2 透视投影,投影参考点用的是观察坐标系中的三维点。假设投影参考点位于zv轴上的zprp处,则描述投影线的参数方程为:,观察平面,zv,zvp,P(x,y,z),(xp,yp,zvp),zprp,其中(x,y,z)表示投影线段上的任意一点。,在观察平面上,z=zvp,这时,投影线与观察平面的交点坐标为:,其中,表示投影中心与观察平面,之间的距离。,投影变换的矩阵表达式:,特殊情况:zvp=0或zprp=0,更一般的情况这里不再讨论。,造型坐标,造型变换,用户坐标,观察变换,观察坐标,投影变换,投影坐标,工作站变换,设备坐标,以上讲解了我们开始提到的三维形体的如下输出过程:,8.5 观察体与三维裁剪,8.5.1 观察体的定义在照相时,相机的镜头是决定所拍摄场景大小的一个因素。在三维显示中,观察平面上的矩形观察窗口用于实现这个目标。,观察窗口的边与xvyv轴平行。窗口边界的位置是由观察坐标指定的,观察窗口可以放在观察平面上的任何位置。,观察平面,(xwmax,ywmax),(xwmin,ywmin),投影窗口,zv,xv,yv,给定观察窗口后,我们可以利用窗口的4条边界建立观察体。只有位于观察体中的物体才会在输出设备上显示出来,所有其他部分将被裁剪掉。观察体的大小与观察窗口的大小有关;而其形状与用于显示的投影类型有关。在任何情况下,观察体的四侧都是穿过窗口边界的平面。注意:投影中心在观察坐标系中定义。,窗口,平行投影观察体,窗口,透视投影观察体,投影中心,通过在zv轴上限制观察体的范围可获得有限观察体。具体方法是:在zv轴上指定与观察平面平行的两个附加边界平面。,窗口,Front Plane,Back Plane,平行六面体,投影中心,Back Plane,Front Plane,平截头体,Frustum,窗口,后平面比前平面离投影中心远,且都在投影中心的同一侧。包括前后面在内六个面界定出了观察体。前后裁剪面的作用:(1)裁剪掉不感兴趣的部分;(2)在透视投影中,裁剪掉离观察面很近的大物体,这些物体投影到观察窗口中模糊不清;后平面裁剪掉远离投影中心的物体,这部分物体在输出设备上是很小的点。观察平面、前后裁剪面的相对位置关系依赖于投影的类型以及图形软件包的限制。,8.5.2 三维裁剪,就是确认并存储将在输出设备上显示的观察体内物体部分,同时舍弃观察体外物体的所有部分。三维裁剪与二维裁剪的不同之处:在二维裁剪中,窗口是与x,y轴平行的,这大大简化了裁剪在二维裁剪中运算。但三维裁剪体的裁剪边界是平面,平面的产生与投影的类型、投影的窗口及投影中心的位置有关。在透视投影中,观察体的前后面与观察平面平行,每个面的z 坐标均为常数,但其他四个侧面可以具有任意的空间方向,这给求交运算带来了麻烦。,直接裁剪方法及其缺点这种方法直接对观察体进行裁剪。该方法主要涉及空间线段与裁剪面的求交运算。设空间线段L的两个端点分别为P1(x1,y1,z1)和P2(x2,y2,z2),空间中任一平面Q的方程为:ax+by+cz+d=0则L与Q之交点(x,y,z)应满足:x=x1+pt y=y1+qt z=z1+rt ax+by+cz+d=0其中,p=x2-x1,q=y2-y1,r=z2-z1,0=t=1,求解可得:,上式中,若ap+bq+cr=0,则说明直线L在平面Q上或与Q平行。否则,直线与平面相交。若t介于0和1之间,则可求出相应的交点,否则,交点不在线段上。这种直接进行三维裁剪的方法的主要缺点是(求交)计算量大。一般地,为提高裁剪的效率,我们先将三维观察体变换到规范化的投影空间进行裁剪。,2.在规范化空间进行裁剪这种方法先用规范化变换将原来的观察体变换为所谓的标准规范体。然后,在规范化裁剪体中进行裁剪操作。事实上,在观察坐标系中,利用平移、错切变换和比例变换就可将三维裁剪空间变换到规范化投影空间。具体算法这里不做详细介绍。根据投影变换的不同,规范化裁剪空间分为规范化平行投影空间和规范化透视投影空间。,窗口,Front Plane,Back Plane,平行六面体,1,1,1,前截面,后截面,x,y,z,规范化平行投影空间,(1)平行投影的情况,即规范化平行投影空间中的物体,沿着垂直于xy平面的方向投影到xy面上。,平行六面体,规范化平行投影空间(立方体),观察平面,与xy平面平行的平面(即xy平面为投影平面),裁剪空间到规范化投影空间的变换,投影中心,Back Plane,Front Plane,平截头体,Frustum,窗口,1,f,y=z,前截面,x=z,x=-z,y=-z,投影中心,x,z,y,规范化透视投影空间,(2)透视投影的情况,平截头体,规范化透视投影空间,观察平面,位于z 轴上zv处与xy平面平行;投影中心与观察窗口中心的连线在z 轴上,投影中心,规范化透视投影空间坐标系的原点,裁剪空间到规范化投影空间的变换,对于透视投影,其规范化投影空间为正四棱台,6个裁剪面的方程为:,由于规范化投影空间的六个面都是简单的平面方程,因而在计算直线与平面的交点时能大大减少计算量。这就是我们利用规范化投影空间进行三维裁剪,而不是相对于任意裁剪空间进行裁剪的原因。,对于平行投影,其规范化投影空间为正四棱柱,6个裁剪面的方程为:,二维编码裁剪算法可以直接推广到三维编码裁剪算法,但技术上存在一定的差别。对于三维Cohen-Sutherland裁剪算法,其关键技术包括:(1)如何确定一点P在观察体内或观察体外。(2)为线段的每个端点赋予区域编码。区分两种情况:(a)规范化平行观察体;(b)规范化透视观察体。设P(x,y,z)是一个端点坐标,其位置用一个6位二进制代码表示(设最左边的位是第1位):,3.裁剪算法三维编码裁剪算法,Above:bit 1=sign(y-1)Below:bit 2=sign(-y)Right:bit 3=sign(x-1)Left:bit 4=sign(-x)Behind:bit 5=sign(z-1)Front:bit 6=sign(-z),1,1,1,前截面,后截面,x,y,z,(a)对于规范化平行观察体,按如下规则设置每位(bit)是1或是0,其中sign(x)是符号函数,即若x0,sign(x)=1;否则,sign(x)=0。,(b)对于规范化透视观察体,,(3)求线与边界面的交点(略),Above:bit 1=sign(y-z)Below:bit 2=sign(-z-y)Right:bit 3=sign(x-z)Left:bit 4=sign(-z-x)Behind:bit 5=sign(z-1)Front:bit 6=sign(f-1),1,f,y=z,前截面,x=z,x=-z,y=-z,投影中心,x,z,y,由此可确定线段的可见性:完全可见、完全不可见、裁剪候选线段。特别地,用这种方法可确定点是否在体内或体外。,8.6 三维形体完整的输出过程(不考虑消隐),造型坐标,造型变换,用户坐标,观察变换,观察坐标,投影变换,投影坐标,工作站变换,设备坐标,规范化观察坐标,三维裁剪,规范化观察坐标,在不考虑隐藏面消隐时,完整的三维观察过程可由以下步骤实现:应用变换Npar或Nper将用户坐标变换成规范化的观察坐标。2.在规范化的观察坐标系中应用规范化裁剪空间对物体 进行三维裁剪。3.应用投影变换Par或Per将裁剪后的物体投射到观察平 面上。4.应用合适的二维观察变换,在二维平面显示三维形体。,若整体观察变换用VT表示,则上述过程可描述如下:,或,其中,CL和V2指适当的裁剪操作和二维观察变换。,三维形体,观察空间的定义及转换,三维裁剪,线框图,到目前为止,我们描述了如何获得三维形体线框图的过程:,习题8,上机实践题之四:试用程序实现将用户坐标系下的点变换到观察坐标系下的点。,8-1 求线段与规范化观察体的边界表面的交点。(a)平行投影,如x=1;(b)透视投影,如x=z。8-2 在三维直角坐标系中,已知投影面为xoy面,投影中心在z 轴的正向、z=d的位置上,求透视投影变换矩阵。,