收藏 分享(赏)

三维图形变换I-2005.ppt

上传人:dzzj200808 文档编号:3312691 上传时间:2018-10-11 格式:PPT 页数:118 大小:2.26MB
下载 相关 举报
三维图形变换I-2005.ppt_第1页
第1页 / 共118页
三维图形变换I-2005.ppt_第2页
第2页 / 共118页
三维图形变换I-2005.ppt_第3页
第3页 / 共118页
三维图形变换I-2005.ppt_第4页
第4页 / 共118页
三维图形变换I-2005.ppt_第5页
第5页 / 共118页
点击查看更多>>
资源描述

1、三维图形变换,关于我们的ftp,课程的资料请去:ftp:/cad:cadwindgoon.8866.org:100 Or: 课程作业上交:gdc:gdc10.76.5.41:21课程作业请先发给助教,并按组分类!不要直接发给gengwd,,上节课程回顾,向量、矩阵、平面以及相应的数学操作 三维点、齐次坐标和变换矩阵 三维绘制流程 三维绘制中的变换,本次课程主要内容,三维绘制流程 三维绘制中的变换 照相机系统和相机模型 视域、背面剔除和裁剪,学习方法,课堂上:理解概念课后:阅读相关资料、书籍最好是自己去推导一遍: 我们课程主页上公布每次课的资料,参考书,计算机游戏程序设计。电子工业出版社。计算

2、机图形学算法基础 科学出版社真实感图形学算法基础 科学出版社OpenGL教材,颜色,可见光的波长 400-780 nm 三色原理用三种颜色表示:R,G,B. 减法颜色系统: Cyan, Magenta, Yellow CMY 常用于打印 加法颜色系统: R+G+B=White CRT 显示器的基本元素,1,2,显示器与缓冲区,彩色CRT包含颜色点阵的数组象素 RGB 三元组 R, G, 和B 由每个象素单独控制 每个分量8个比特 缓冲区存储将显示在显示器上的内容 一般在显卡内存中,绘制流程,标准的绘制流程由一系列计算组成 输入是:多边形 输出是保存在缓冲区的图像 主要涉及的操作是:三维变换与光

3、照!,向量几何基础,所有点和向量都相对于某个坐标系统定义。,标量:数值、实数等. 点:二维或者三维位置,表示了几何点在三维坐标系统中的位置。 向量:带长度的有向线段,无物理位置,V,P,X,Y,Z,V,向量,向量是一列数字,表示如下:,向量几何:基本操作,加法:点与向量的加法:点的减法:向量缩放,v1,v2,v1+v2,v,p,q=p+v,v,p2,p1,向量几何的其他操作,线性混合: 长度与距离:单位向量: 向量归一化:,向量几何:点积,定义: 属性:向量之间的夹角:垂直向量:,q,a,b,向量几何:投影,向量投影: 投影与坐标系,v2,v1,P 0,v2,v1,P 0,i,j,k,向量几何

4、:叉积,V1和v2的叉积是一个新的向量v,它与 v1和 v2都垂直,其范数为:属性:,a,b,axb,area=|axb|,叉积与点积的区别,两个向量的点积是一个数两个向量的叉积仍然是一个向量,点与向量的坐标系统,坐标系统由三个正交的向量 i, j, k 以及原点O组成. 向量的表示:点的表示:,i,j,k,O,线的表示方法,二维解析表达形式 :三维解析表达形式 :参数形式 :线段,平面表示,解析表达式参数表达式平面法向 解析形式:参数形式:多边形法向:,p0,v2,v1,v2,p1,p2,p3,p4,平面与法向,三点决定一个平面,法向是垂直平面的向量,平面方程,给定垂直平面的法向N=(A,B

5、,C)T,以及平面上任意一点(x0,y0,z0),我们能够得到未知系数D,并确定相应的平面方程,齐次坐标,一个统一的点与向量表示方法 向量:点:统一的形式:,齐次坐标,右边的四元组称为齐次坐标,齐次坐标,非齐次坐标,点的空间坐标与齐次坐标,三维空间上的点(x,y,z)T可以表示为四维空间中的一个齐次点(x,y,z,w)T,其中w=1 用齐次坐标表示空间中的点,能够方便进行各种运算。同样的,可将矩阵写作齐次形式,即将原来的3x3大小的矩阵扩充为4x4大小的矩阵。例如,I的齐次形式为:,空间坐标系到齐次坐标系的转换,点的齐次坐标表示齐次向量!坐标形式(w0),几何求交,线段求交 平行? 求交点的计

6、算 通过三个点的园: 主要任务是计算中心点 线与线求交、线与面求交: 参数解 可用于裁剪 线与多边形求交 边界计算 光线与多边形求交,矩阵,矩阵是n个向量的并列表示,矩阵的加法,将矩阵对应的元素直接相加,矩阵减法,将矩阵对应的元素直接相减,矩阵与向量的乘法,矩阵与向量相乘注意:矩阵的列数必须与向量的行数相等,矩阵乘法,两个矩阵的乘法可以分解为第一个矩阵与第二个矩阵中的每一列向量的乘法,矩阵乘法,如果A和B分别为mxp以及pxn大小的矩阵,则AxB为mxn矩阵 一般的,矩阵乘法不满足交换率,即AxB BxA 如果I是单位阵,则AxI = IxA = AI具有如下形式:,方阵的逆和行列式的值,方阵

7、A的逆记为A-1:A-1A=AA-1=I 如果方阵对应的行列式的值det(A)0,则A不可逆 如果A是3x3的方阵,则,游戏中的矩阵,三维图形学中一般使用4x4矩阵矩阵乘法:,Point3数据结构,struct Point3 Union struct float x,y,z; /分量形式;float v3; / 数组形式;Point3() ; /缺省构造函数Point3 (float X, float Y, float Z) /带参构造函数x = X; y=Y; z=Z/ 更多 ;,Plane3数据结构,struct Plane3 Point3 n; / 平面法向float d; /原点垂直法

8、向距离Plane3() /缺省构造函数plane3(float nX,float nY, float nZ, float D) n(nX, nY, nZ); d=D/更多: 从三点构在一个平面,从多边形构造一个平面等等 ;,struct matrix4 union struct float _11,_12,_13,_14;float _21,_22,_23,_24;float _31,_32,_33,_34;float _41,_42,_43,_44; /分量表示float m44; /矩阵表示;/带参构造函数matrix4 (float IN_11, float IN_12, float I

9、N_13, float IN_14, float IN_21, float IN_22, float IN_23, float IN_24,float IN_31, float IN_32, float IN_33, float IN_34,float IN_41, float IN_42, float IN_43, float IN_44) _11=IN_11; _12=IN_12; _13=IN_13; _14=IN_14;_21=IN_21; _22=IN_22; _23=IN_23; _24=IN_24;_31=IN_31; _32=IN_32; _33=IN_33; _34=IN_3

10、4;_41=IN_41; _42=IN_42; _43=IN_43; _44=IN_44; ;,Matrix4数据结构,三维变换,一个变换通常用4x4矩阵表示. 对一个点或者向量进行变换等价于将一个矩阵乘以该点或向量的齐次坐标. 向量的嵌套: 如矩阵乘法,截至3月21日未交Review的同学,吴振强 李伟小组 冯慧 朱凯小组 黄毅肇 喻杨 魏栋彦小组 吴鹏程 周麒小组 俞立 x小组 丁子昂 x小组 郭佩宗 x小组 任宇翔 张凌小组 其中,俞立、丁子昂、郭佩宗是大二的,不知道是不是旁听的。,左手坐标系-右手坐标系,右手坐标系:当右手四指沿x轴至y轴方向握紧,拇指所指的方向即为+z方向(缺省坐标系

11、) 左手坐标系:判断方法类似,用左手,平移,利用平移矩阵,将点V=(x,y,z)T平移至V=(x+Tx,y+Ty,z+Tz)T处,表示为V=V+T,缩放,利用缩放矩阵,将点V=(x,y,z)T缩放(d1,d2,d3)倍其中对角线上的元素表示对应坐标系分别放大(di1)或者缩小了(di1)的量,旋转,矩阵R是旋转矩阵,如果R的转置等于R的逆,即RTR=RRT=I 每个矩阵R对应一单位长度的旋转轴U和旋转角度。该对应并不是唯一的,例如-U也是对应R的旋转轴,绕x轴旋转,当点绕x轴以逆时针方向(从x轴正方向向原点看)旋转角时,旋转矩阵为:,x,y,z,绕y轴旋转,当点绕y轴以逆时针方向旋转角时,旋转

12、矩阵为:,绕z轴旋转,当点绕z轴以逆时针方向旋转角时,旋转矩阵为:,旋转,令 c=cos(q) 且 s=sin(q)沿X-轴s:沿Y-轴s:沿 Z-轴:,矩阵复合,矩阵复合可完成对空间点的任意操作 矩阵乘法不满足交换率,因此复合的次序非常重要! 例如:先缩放后平移先平移后缩放 通常情况下,给出的旋转矩阵是绕原点旋转的。因此首先要将物体平移至原点,进行旋转,再平移回来。,沿平行坐标轴的直线旋转物体,如何得到变换矩阵: 将物体平移至原点 绕坐标轴旋转 将物体重新平移至其原先的位置,举例,将盒子绕平行于z轴且经过P=(Tx,Ty,Tz)T点的直线旋转,初始状态,结束状态,举例(续),平移至原点旋转再

13、平移回来,变换矩阵,将每一步的基本变换矩阵连接,得到总的变换矩阵,图形流水线中的物体坐标系,建模时所采用的坐标系 选取物体上或靠近物体的某一点作为原点,物体上的其他点相对于该点的坐标进行表示 针对物体的局部坐标系 举例:选取立方体的某一个顶点作为原点,建立局部坐标系,图形流水线中的世界坐标系,全局坐标系 所有物体组成一个场景,场景坐标系称为世界坐标系 所有物体必须变换至该坐标系,以确定彼此之间的相对空间位置 将物体放至场景内等价于定义一个从物体局部坐标系至世界坐标系的变换矩阵 场景需要定义光照,图形流水线中的照相机坐标系统,照相机坐标系统决定照相机参数和可见域 必须包括 视点位置 视线 视点坐

14、标系 投影平面 视域 其他(可选),视点和视线方向,从C沿着N方向看,投影平面,照相机坐标系,视域四棱锥,坐标轴系统,世界坐标系,相机矩阵,投影矩阵,相机坐标,Device coordinates,视区矩阵,窗口坐标,物体坐标,模型矩阵,ModelView 变换,局部物体坐标,世界坐标,相机坐标,设备坐标,窗口坐标系统,投影与裁剪,模型变换,将局部坐标系变换到世界坐标系 包括缩放、旋转、平移等,相机变换,将世界坐标系中的一点变换至照相机坐标系 可以分成平移和旋转两部分,参数确定,用户给出C、N、V,U通过下面的公式计算:U=NXV,则N、U和V组成一个左手坐标系 一般地,用户大致给出V的方向,

15、记为V,(V不需要垂直于N),然后计算V:,投影变换,视域、投影方式、屏幕分辨率 投影物体首先与视域求交决定可见部分,平行投影,透视投影,投影过程,投影:n维空间上一点变换至m(n)维空间 m=n-1且n=3的情况,P,Q,平行投影,将物体从三维场景投影到屏幕 投影矩阵:,Z=0 plane,正交相机模型,透视投影,将物体从三维场景投影到投影平面 投影矩阵:,Z=0 plane,eye,focus,标准透视相机模型(I),标准相机模型,视点与原点重合,视线平行于+z方向,近切割平面z=n0,远切割平面z=f0 视区(投影平面)为一长方体 视域四棱锥四个侧面由下列方程给出:左侧面x=lz/n,右

16、侧面x=rz/n,上侧面y=tz/n,下侧面y=bz/n,投影矩阵,OpenGL,DirectX,透视相机模型(II),透视变换图例,仿射投影,透视变换图例,透视变换图例,透视变换规则,利用相似三角形定理,有:用齐次坐标表示:,透视变换矩阵,给定其中,背面剔除,将多边形的朝向与视点或投影中心相比较,去除那些不可见多边形可见性测试在视见空间内进行。计算每一个多边形的法向,并检查法向与视线方向点积后值的符号,背面剔除,如果法向指向物体外部,则可见性的判断条件为:其中Np为法向,N为视线方向,视域体裁剪,当且仅当视域体内的物体将被投影. 决定物体的哪一部分将被投影,哪一部分被剔除的过程叫做裁剪.,Z

17、=0 plane,视域体裁剪,三维物体裁剪,用视域四棱锥对物体进行裁剪 把一个多边形相对于视域四棱锥的每个裁剪面进行裁剪测试 在齐次坐标系中,视域四棱锥的六个裁剪面为:,三维物体裁剪,采用三维Sutherland-Hodgman裁剪算法 最终分解为线段与平面的求交的基本问题 根据多边形顶点的坐标,很容易判断出顶点位于裁剪面的内侧还是外侧,若求取直线与裁剪面的交点,只需把直线方程代入裁剪面方程即可,视域四棱锥裁剪(二维示例),视域四棱锥裁剪的四种情况,两个顶点完全位于视域四棱锥内,把第二个顶点加入输出顶点表 第一个顶点在裁剪平面内侧,第二个顶点在裁剪平面外侧,将交点加入输出顶点表 两个顶点均在裁

18、剪平面外侧,输出顶点表不加任何顶点 第一个顶点在裁剪平面外侧,第二个顶点在裁剪平面内侧,将交点和第二个顶点加入输出顶点表,裁剪的四种情况-1,裁剪的四种情况-2,裁剪的四种情况-3,裁剪的四种情况-4,视域四棱锥裁剪,视域四棱锥裁剪对所有四个齐次坐标进行,w分量与其他分量一样处理 输出仍为齐次坐标,裁剪方法-1,在场景坐标系中进行裁剪,然后变换到视点坐 标系 把物体从局部坐标系变换至场景坐标系 背面剔除 将视域四棱锥反变换至场景坐标系,称之为场景四棱锥 在场景坐标系中用场景四棱锥裁剪物体 裁剪后的物体从场景坐标系变换至视点坐标系,裁剪方法-2,在局部坐标系中进行裁剪,然后变换到视点坐 标系 把

19、相机从场景坐标系变换至局部坐标系 背面剔除 将视域四棱锥反变换至局部坐标系 局部坐标系中用反变换得到的四棱锥裁剪物体 裁剪后的物体从局部坐标系变换至视点坐标系,裁剪方法-3,将物体首先变换到视点坐标系,在视点坐标系 中进行裁剪, 把相机从场景坐标系变换至局部坐标系 背面剔除 将物体从局部坐标系变换至视点坐标系 用视域四棱锥进行裁剪,从世界坐标系到屏幕坐标系,将物体从世界坐标系变换至屏幕坐标系,可以看成是:将物体首先作相机变换,再作透视变换:一般还需要一个视区变换,视区变换,将视域归一化 视域与物体求交,视域之外的部分物体不参与显示过程 求交后的物体投影,并按照相应的视见区域大小xmin,xma

20、x、 ymin,ymax、 zmin,zmax进行缩放,OpenGL中的变换矩阵,相机变换: 指定照相机位置和方向(也叫照相机坐标系统) 模型变换: 将物体在场景中移动,也可以视为从局部坐标系到全局坐标系 ModelView变换: 相机变换和模型变换的混合. 投影变换: 定义视域体并指向投影 视区变换: 将二维投影后的场景变换到绘制窗口.,相机坐标,照相机坐标系统: 也叫视点坐标系统或者视见坐标系统. 它表示了在照相机后面看场景的坐标关系。X-Y平面是投影面(也叫平面) ,照相机一般往负z方向看。,相机变换的两种方法 保持相机不变,将物体(在世界坐标系统中)绕着相机旋转。 保持物体不变,将相机

21、在世界坐标系统中变换。相机变换是物体变换的逆变换。,y,x,z,-z,eye,设置相机: “Look At” 相机,将相机放置到世界坐标系统中定义相机变换glMatrixMode (GL_MODELVIEW);glLoadIdentity ();gluLookAt (eye.x, eye.y, eye.z, look.x,look.y, look.z, up.x, up.y, up.z);,up,eye,look,Y,Z,X,WCS,x,y,z,P0,Q0,VCS,从 LookAt 设置中计算相机变换,坐标系统, 形成了.:,v,u,n,-n,eye,look,相机变换:,OpenGL例子(L

22、ook At相机),Void DisplayScene () glClear (GL_COLOR_BUFFER_BIT);glColor3f (1.0f, 0.0f, 0.0f);glLoadIdentity ();gluLookAt (0.0, 0.0, 10.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0);glBegin (GL_TRIANGLE);glVertex3f (10.0f, 0.0f, 0.0f);glVertex3f (0.0f, 10.0f, 0.0f);glVertex3f (-10.0f, 0.0f, 0.0f);glEnd();glFlush

23、(); ,设置相机的另一种方法: 变换场景,gluLookAt 函数显式地定义相机。另外一种方法式将场景进行旋转(glRotate)和平移(glTranslate) 同时,将相机置于缺省的世界坐标系统. 旋转和平移的累积效果构成了最终的相机变换. 当然, glTranslate 和 glRotate也可用作其他用途,OpenGL例子(变换场景),/viewing a scene centered at origin from +X direction: Void DisplayScene ()glClear (GL_COLOR_BUFFER_BIT);glColor3f (1.0f, 0.0f

24、, 0.0f);glLoadIdentity ();glTranslatef (0.0, 0.0, -10.0);glRotatef (-90.0, 0.0, 1.0, 0.0); /glBegin (GL_TRIANGLE);glVertex3f (10.0f, 0.0f, 0.0f);glVertex3f (0.0f, 10.0f, 0.0f);glVertex3f (-10.0f, 0.0f, 0.0f);glEnd();glFlush (); ,ModelView 矩阵,ModelView变换式建模矩阵M和相机变换V的乘积 C = VM 所有在OpenGL中的变换函数只能设置model

25、view 矩阵. 因此, ModelView 在物体被操作之前被调用. 例如:glMatrixMode (GL_MODELVIEW);glLoadIdentity ();glScalef (2.0f, 2.0f, 2.0f);DrawScene ();,ModelView 矩阵堆栈,矩阵堆栈的顶部矩阵就是当前的ModelView 矩阵 (C). glPushMatrix (): 将当前的矩阵加入到矩阵堆栈 glPopMatrix (): 将顶部矩阵删除,并将所有其他矩阵往上移动一位。 矩阵堆栈的好处:允许一系列位置(代表了坐标系统)保留下来,并在需要的时候使用它们。,M1,M2,M3,变换的合

26、成,一系列变换的合成可通过矩阵的嵌套完成关于任意一点的缩放:关于任意轴的旋转,矩阵阵列,建模变换: glLoadIdentity : C I glLoadMatrix(m) : C m glMultiMatrix(m) : C C m glRotatef(q,x,y,z) : C C RL(q) glTranslatef(x,y,z) : C C T(x,y,z) glScalef(x,y,z) : C C S(x,y,z) 最后定义的变换最先被执行.,投影变换,投影变换设置视域体,从而定义裁剪面和投影矩阵以及投影方式。 投影矩阵在ModelView矩阵之后被实行,因此,视域体是定义 在相机坐

27、标系统中的。 透视投影与平行投影,平行(正交)投影,定义正交视域体:glOrtho (left, right, bottom, top, near, far);或者: glOrtho2D (left, right, bottom, top); 定义投影矩阵:glMatrixMode (GL_PROJECTION);glLoadIdentity ( );glOrtho (left, right, bottom, top, near, far),Y,Z,X,成像平面,视域体,VCS,(Left, righ, bottom, top) 定义视域体的最小、最大的 X 和Y坐标; (near, far)

28、 定义视域体的近和远平面到X-Y平面的距离.,透视投影,视域四堎锥的定义:glFrustum (left, right, bottom, top, near, far)视域体的形成是:将原点与前面的四个顶点连接起来,并由Z方向的近平面和远平面限制。,Y,Z,X,成像平面,视域四堎锥,原点,投影矩阵glMatrixMode (GL_PROJECTION);glLoadIdentity ();glFrustum (left, right, bottom, top, near, far),透视投影(II),视域体的定义glMatrixMode (GL_PROJECTION);glLoadIdenti

29、ty ();gluPerspective (angle, aspect, near, far),Y,Z,X,angle: y方向张的视角 aspect: 方正率 (成像平面的宽度/高度).,视区,视区是窗口的绘制区域,特殊的视区是全屏幕 缺省视区是窗口本身 视区矩阵将投影后的成像平面投到视区glViewport (GLint left, GLint bottom, GLint width, GLint height) (left, bottom, width, height) 定义在窗口系统中(象素级),窗口,视区,(left, bottom),(right, top),用户定义矩阵,可随意装

30、入矩阵:GLfloat m16 = 1.0, 0.0, 0.0, ;glLoadMatrixf (m); 矩阵乘法:glMultMatrixf (m);,基于OpenGL的游戏,Quake series (id Software):,Doom3 (id Software):,Half Life (Valve):,Soldier of Fortune (Raven):,And much more: Tribes 2 (Dynamix), Serious Sam (Croteam), Star Trek Voyager ELite Force (Raven), etc.,课后作业,熟悉OpenGL流程 自行推导向量变换、坐标变换 理解齐次坐标 实现一个三维向量与矩阵类(包括.h,.cpp) 预习OpenGL高级编程课题,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报