您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 计算机图形学电子教案c4
第4章图形变换4.1图形变换的数学基础4.2图形的几何变换4.3显示变换4.4图形显示的流程4.5图形显示中的裁剪问题4.6OpenGL的坐标变换机制4.1图形变换的数学基础矢量、点和欧氏空间坐标系和坐标矩阵与坐标变换齐次坐标的引入矢量矢量具有确定的方向和大小(长度)矢量是流动的,无位置概念矢量的运算C=A+B,B=2A矢量点表示空间中的一个位置点和另一个点相减得到一个矢量v=P-Q矢量和点相加得到另一个点P=Q+v点和矢量都是客观实在欧氏空间点乘a=u。v(a为实数,u、v为矢量)0。0=0如果u。v=0,则称u和v垂直矢量的长度|v|,|v|2=v。v欧氏空间投影u。v=|u||v|cos()矢量乘n=uxv,|n|=|u||v|sin()–由右手法则确定方向坐标系和坐标为了描述矢量和点引入坐标系在3维空间,给出三个线性无关的矢量v1、v2、v3则任意一个矢量w可以表示为:–w=a1v1+a2v2+a3v3,(a1a2a3为实数)–因此,可以将矢量w记为a(a1,a2,a3)坐标系和坐标在三维空间给定一个点P0和三个线性无关的矢量v1、v2、v3则,空间中任何一个点P可以表示为:–P=P0+a1v1+a2v2+a3v3,(a1a2a3为实数)–称点P的坐标为(a1,a2,a3)–写成矩阵形式为:–P=P0+(a1,a2,a3)(v1、v2、v3)T坐标系之间的变换已知–坐标系I:原点Q0,坐标轴{u1,u2,u3}–坐标系II:原点P0,坐标轴{v1,v2,v3}–Q0在坐标系II的坐标为:[q1,q2,q3]坐标系之间的变换写成矩阵形式:–Q0=P0+[q1,q2,q3]{v1,v2,v3}T–{u1,u2,u3}T=M{v1,v2,v3}T–其中:坐标系之间的变换对于空间中的任一个点D,如果已知D点在坐标系II中的坐标为[d1d2d3]则:–D=P0+[d1d2d3]{v1,v2,v3}T–=Q0-[q1q2q3]{v1,v2,v3}T–+[d1d2d3]{v1,v2,v3}T–=Q0+([d1d2d3]-[q1q2q3])M-1{u1,u2,u3}T所以,D点在坐标系I中的坐标为–([d1d2d3]-[q1q2q3])M-1齐次坐标的引入对于三维空间中的点,其坐标用三个实数表示,如:(X,Y,Z)。还可以用四个实数来表示一个点的坐标,写为:–(X,Y,Z,W),其中W不能为0。–该坐标与(X/W,Y/W,Z/W)等价。这样做有许多方面的好处:–1、很容易表示无穷远点–2、容易用矩阵与矢量乘的方法表示点的平移操作,以便简化计算过程。齐次坐标的引入例一:–式子P=P0+a1v1+a2v2+a3v3的简化:–非齐次坐标:P=P0+[a1,a2,a3]{v1,v2,v3}T–齐次坐标:齐次坐标的引入将关系式简化为:齐次坐标的引入对于空间中的任一个点D,如果已知D点在坐标系II中的坐标为[d1d2d31]D=[d1d2d31]{v1,v2,v3,P0}T=[d1d2d31]M-1{u1,u2,u3,Q0}T推导过程也变得简单了Q’=[q’1,q’2,q’2,1]{u1,u2,u3,Q0}T=[q’1,q’2,q’2,1]M{v1,v2,v3,P0}T4.2图形的几何变换图形几何变换的目的平移、旋转、缩放变换的组合图形几何变换的目的改变图形的位置、方向、大小平移(Translation)P’=P+D,其中D=[ax,ay,az,0]P’=[px’,py’,pz’,1]P=[px,py,pz,1]写成矩阵与矢量的乘法P’=TP缩放(scaling)P’=SP旋转(rotation)P’=RP几何变换的组合4.3显示变换三维图形显示的物理模型透视投影变换平行投影变换视口变换视坐标系与视变换三维图形的显示流程视口到三维空间的反变换三维图形显示的模型视景体(圆台、四棱台)三维图形显示的模型视景体的参数三维图形显示的模型上方矢量三维图形显示的模型前后裁剪面三维图形显示的模型视角的影响三维图形显示的模型视口长宽比例的影响三维图形显示的模型平行投影的显示模型透视投影变换透视投影变换X/X’=Y/Y’=Z/dX’=Xd/ZY’=Yd/ZZ’=d透视投影变换矩阵:平行投影变换视口变换W’H’X’/W’=(X+W/2)/WX’=XW’/W+W’/(2W)(H’-Y’)/H’=(Y+H/2)/HY’=-YH’/H+H’-H’/(2H)W’/W00W’/(2W)M=0-H’/H0H’-H’/(2H)00100001视坐标系与视变换给定视坐标系:–(Ex,Ey,Ez),(Ax,Ay,Az),(px,py,pz)–E视点A被观察点p向上方向矢量n=(E-A)/|E-A|u=(pXn)/|pXn|v=nXu4.视坐标系与视变换u=(ux,uy,uz,0)v=(vx,vy,vz,0)n=(nx,ny,nz,0)E=(Ex,Ey,Ez,1)CN=(u,v,n,E)T,CO=(X,Y,Z,O)T,CN=MXCOCO=M-1XCNM=uxuyuz0vxvyvz0nxnyny0ExEyEz1D=(Dx,Dy,Dz,1)XCO=(Dx,Dy,Dz,1)M-1XCN(Du,Dv,Dn,1)=(Dx,Dy,Dz,1)M-1(Du,Dv,Dn,1)T=(M-1)T(Dx,Dy,Dz,1)T视变换矩阵(M-1)T4.4图形显示的流程设一个点的世界坐标系下坐标为:P设世界坐标向视坐标变换的矩阵为:T视设投影矩阵为:T投设视口变换矩阵为:Tw则:Pw=TwT投T视P,–令T=TwT投T视,则:–Pw=TP4.5图形显示中的裁剪问题视景体三维图形显示过程中的裁剪平面裁剪算法(自学)三维裁剪算法(自学)4.6OpenGL的坐标变换机制有关的数据结构ModelView变换机制Model变换的使用方法View的变换使用方法Project的使用方法显示流程有关的数据结构两个坐标变换矩阵(4X4)–ModelView矩阵GL_MODELVIEW–Projection矩阵GL_PROJECTION–glMatrixMode(GL_MODELVIEW);–glMatrixMode(GL_PROJECTION);两个用于存储矩阵的堆栈:–ModelView矩阵堆栈–Projection矩阵堆栈ModelView变换机制Model变换的目的是改变物体的位置和尺寸View变换的目的是改变观察的方向以上两个目的是用一个手段来实现的,即:操作ModelView矩阵Model变换的使用方法首先使以下函数,表示开始操作ModelView矩阵–glMatrixMode(GL_MODELVIEW);操作ModelView矩阵进行Model变换的方法分两类:glLoadIdentity();glLoadMatrixf(*m);glMultMatrixf(*m);glTranslatef(dx,dy,dz);glRotatef(angle,vx,vy,vz);glScalef(sx,sy,sz);View变换的使用方法可以使用上述所有函数来设值观察方向利用以下函数则更方便:–gluLookAt(ex,ey,ez,ax,ay,az,px,py,pz);–e—视点–a—被观察点–p—向上方向平行投影的使用方法投影矩阵–首先必须使用下面的函数进入投影矩阵模式glMatrixMode(GL_PROJECTION);–可以直接设值投影矩阵的值来进行投影,但一般使用下面的函数设值投影矩阵:glOrtho(xmin,xmax,ymin,ymax,near,far);glFrustum(xmin,xmax,ymin,ymax,near,far);gluPerspective(fovy,aspect,near,far);glOrtho(xmin,xmax,ymin,ymax,near,far);glFrustum(xmin,xmax,ymin,ymax,near,far);gluPerspective(fovy,aspect,near,far);OpenGL执行的次序OpenGL程序编程的次序–1、操作投影矩阵,设置投影方式和参数(视坐标系-窗口坐标)–2、操作ModelView矩阵,设置观察方向和参数(世界坐标-视坐标)–3、操作ModelView矩阵,设置物体的位置(局部坐标-世界坐标)–4、给出待绘制物体的坐标(在局部坐标系下的坐标)显示流程
本文标题:计算机图形学电子教案c4
链接地址:https://www.777doc.com/doc-3681514 .html