第 8 章 三维图形变换

25
第8第 第第第第第第

Upload: raymond-hernandez

Post on 30-Dec-2015

60 views

Category:

Documents


7 download

DESCRIPTION

第 8 章 三维图形变换. 第 8 章 三维图形变换. 8.1 三维几何变换 8.2 投影变换 8.3 三维观察 8.4 三维裁剪 8.5 OpenGL 中的三维图形变换. 8.1 三维几何变换. 8.1.1 三维齐次坐标矩阵 8.1.2 三维基本几何变换 8.1.3 三维复合变换. 8.1.1 三维齐次坐标矩阵. 与二维图形一样,我们在介绍三维图形几何变换时也采用齐次坐标来进行描述。( x,y,z )用齐次坐标表示为( x,y,z,1 )。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 8 章  三维图形变换

第 8 章 三维图形变换

Page 2: 第 8 章  三维图形变换

第 8 章 三维图形变换

8.1 三维几何变换 8.2 投影变换 8.3 三维观察 8.4 三维裁剪 8.5 OpenGL 中的三维图形变换

Page 3: 第 8 章  三维图形变换

8.1 三维几何变换

8.1.1 三维齐次坐标矩阵 8.1.2 三维基本几何变换 8.1.3 三维复合变换

Page 4: 第 8 章  三维图形变换

8.1.1 三维齐次坐标矩阵

与二维图形一样,我们在介绍三维图形几何变换时也采用齐次坐标来进行描述。( x,y,z)用齐次坐标表示为( x,y,z,1)。

如果用坐标( x,y,z)来表示三维空间中变换前的点,用( x′,y′,z′)来表示变换后的结果,则其变换方程为:

Tzyxzyx 11

Page 5: 第 8 章  三维图形变换

8.1.2 三维基本几何变换

与二维变换类似,三维基本几何变换都是相对于坐标原点和坐标轴进行的几何变换,有平移、比例、对称、旋转等。在以下的介绍中,我们用坐标( x,y,z)来表示变换前的点,变换后的结果表示为( x′,y′,z′)。

1. 平移变换 2. 比例变换 3. 旋转变换 4. 对称变换 5. 错切变换

Page 6: 第 8 章  三维图形变换

8.1.3 三维复合变换

上面我们介绍的三维图形基本的几何变换都是针对原点或者坐标轴进行的,如果要针对任意一个参考点,或者任意一条直线来进行变换,就需要进行三维图形的复合变换。与二维复合变换类似,三维复合变换是指图形作一次以上的变换,变换结果是每次的变换矩阵相乘,可表示为:

TzyxTTTTzyxzyx n 111 321

Page 7: 第 8 章  三维图形变换

8.2 投影变换

8.2.1 正平行投影 8.2.2 正轴侧投影 8.2.3 斜平行投影 8.2.4 透视投影

Page 8: 第 8 章  三维图形变换

8.2.1 正平行投影

投影方向垂直于投影平面时称为正平行投影。我们通常所说的三视图即正视图、俯视图与侧视图即属于正平行投影。

在工程上将三维坐标系 Oxyz的三个坐标平面分别分为 V面( xOz平面)、 H面( xOy平面)和W面( yOz平面 .

通常说的三视图包括主视图、俯视图和侧视图三种,其投影面分别为 V面、 H面和W面。在 V面上的投影图称为主视图,在 H面上的投影图称为俯视图,在W面上的投影图称为侧视图。

Page 9: 第 8 章  三维图形变换

8.2.2 正轴侧投影

正轴侧投影是对任意平面作的投影。设投影平面的方向矢量为 ON,进行正轴侧投影的过程是首先投影平面的方向矢量旋转变换到 y轴,再对 xOz坐标平面作投影变换即可。由于投影变换的结果可直接放在 xOz平面上,因此无需再将投影旋转回面原来的位置。

Page 10: 第 8 章  三维图形变换

8.2.3 斜平行投影

投影方向不垂直于投影面的平行投影称为斜平行投影,也称为斜轴侧投影。在斜平行投影中,投影平面一般取为坐标平面。

设投影方向矢量为 N=( l,m,n),投影平面为平面 xOy。若形体上一点为 P( x,y,z),将其进行斜投影后,要求在 xOy平面上的坐标 P′( xp,yp)。

Page 11: 第 8 章  三维图形变换

8.2.4 透视投影

在平行投影法中,物体投影的大小与物体距投影面的距离无关,与人的视觉成像不符。而透视投影采用中心投影法,与人观察景物的情况比较相似。

投影中心又称为视点,它相当于观察者的眼睛。投影面置于视点与立体之间,将立体上与视点相连所得到的投影线与投影面的交点就是三维立体上相应点的透视变换结果。

1. 点的透视变换 2. 一点透视 3. 两点透视 4. 三点透视

Page 12: 第 8 章  三维图形变换

8.3 三维观察

8.3.1 观察坐标系 8.3.2 从世界坐标到观察坐标的变换 8.3.3 观察空间 8.3.4 规范化投影空间 8.3.5 三维观察流程

Page 13: 第 8 章  三维图形变换

8.3.1 观察坐标系

在实际生活中,我们在对物体进行拍照时,可以通过移动视点,以不同的距离与角度对物体进行观察。而在计算机图形学中,我们可以在世界坐标系中通过建立观察坐标系来实现对三维物体的观察。

首先,我们需要建立观察坐标系来选择一张指定的视图。然后,建立起与观察坐标系中 xvyv平面相平行的观察平面。将三维物体的世界坐标转化为观察坐标,然后将观察坐标再投影到观察平面上。

为建立观察坐标系,首先需要在世界坐标系中挑选一点作为观察坐标系的原点,也称为观察参考点。它就类似于相机镜头所在的位置。然后在该点处指定法矢量 N,法矢量 N即为观察坐标系中的 z轴的正向和观察平面的方向。

Page 14: 第 8 章  三维图形变换

8.3.2 从世界坐标到观察坐标的变换

在将三维物体投影到观察平面之前,必须先将物体由世界坐标系变换到观察坐标系中。该变换可通过基本几何变换中的平移和旋转变换,将观察坐标系叠加到世界坐标系上。

具体可分为以下两步: ( 1)平移观察参考点到世界坐标系的原点。如果指定世界坐标系中的点 P( x0,y0,z0)为观察参考点,则对应的平移变换矩阵为:

( 2)进行旋转变换,让观察坐标轴 xv, yv和 zv分别与世界坐标轴 xw, yw和 zw重合。

1

0100

0010

0001

000

1

zyx

T

Page 15: 第 8 章  三维图形变换

8.3.3 观察空间

与二维观察相类似,在三维观察中,我们也需要在观察平面上指定一个窗口,称为观察窗口或投影窗口,以决定在输出设备中显示的内容。

观察窗口的边与 xv和 yv轴相平行,观察窗口的位置用观察坐标给出,其左下角的坐标( xwmin,ywmin)与右上角的坐标( xwmax,ywmax)决定了观察窗口的大小。观察窗口可以位于观察平面上的任何位置。

Page 16: 第 8 章  三维图形变换

8.3.4 规范化投影空间

对于斜平行投影,其观察空间为一斜四棱柱,或当透视投影的观察空间为斜四棱台时,这就给观察空间边界平面的表示带来了不便,对于下一步的裁剪及求交运算效率也不高。因此,我们要对其先进行规范化变换,将斜四棱柱规范化为正四棱柱,将透视投影的斜四棱台规范化为正四棱台。

1. 平行投影观察空间的规范化 2. 透视投影观察空间的规范化

Page 17: 第 8 章  三维图形变换

8.3.5 三维观察流程

引入了观察坐标系与观察空间的概念之后,三维观察的过程可以经由以下几个步骤来完成。

首先,在世界坐标系中生成图形;其次,进行从世界坐标系到观察坐标系的变换,将世界坐标系中的图形描述转换到观察坐标系中。然后进行观察空间的规范化变换,再在规范化空间内进行图形的三维裁剪。裁剪完后即可作正投影,将裁剪后的图形投影到观察平面上。最后,将观察窗口中的内容在图形输出设备上进行显示。

Page 18: 第 8 章  三维图形变换

8.4 三维裁剪

在二维图形的裁剪中,窗口为一平面矩形,而在三维裁剪中,三维窗口经规范化变换后,在平行投影时为立方体,在透视投影时为四棱台。

组成三维窗口的六个面,将三维空间分为两部分,即窗口内部分和窗口外部分。三维裁剪就是要把落于窗口内的图形分割出来,以便于在输出设备中进行显示。

Page 19: 第 8 章  三维图形变换

8.5 OpenGL 中的三维图形变换

8.5.1 OpenGL 中的矩阵操作函数 8.5.2 几何变换 8.5.3 投影变换 8.5.4 视区变换 8.5.5 裁剪变换 8.5.6 矩阵堆栈

Page 20: 第 8 章  三维图形变换

8.5.1 OpenGL 中的矩阵操作函数

OpenGL中提供了丰富的图形变换函数,这些函数都是通过矩阵操作来实现的。为方便这些变换矩阵的实现, OpenGL中还提供了一系列的矩阵操作函数。

在进行 OpenGL的变换之前,必须先确认当前矩阵的模式,是模型观察矩阵还是投影矩阵,以便于对指定的矩阵模式进行变换。

Page 21: 第 8 章  三维图形变换

8.5.2 几何变换

在计算机图形学中,模型变换和视点变换统称为几何变换。这两类变换都是通过调整物体与视点间的相对位置、大小与角度关系,以达到满意的视觉效果。只是它们考虑问题的出发点不一样,一个是对物体本身进行变换,一个是对视点进行变换。

1. 模型变换 2. 视点变换

Page 22: 第 8 章  三维图形变换

8.5.3 投影变换

投影变换的目的是定义一个观察体,即有限的观察空间。观察体不仅决定了一个物体是如何投影到屏幕上的,是使用的透视投影还是正交投影,也决定了物体最终投影到屏幕上的部分以及哪些部分将被裁剪掉。

1. 正交投影 2. 透视投影

Page 23: 第 8 章  三维图形变换

8.5.4 视区变换

视区是在窗口中绘制图形的一个矩形区域。视区的方位与大小是用窗口坐标来度量的,它反映了相对于窗口左下角的屏幕像素位置。在将观察体中的图形投影到视区之前,所有的顶点都经过了视点模型变换和投影变换,并且位于观察体之外的图形已被裁剪掉了。

视区通常设置为与所开窗口一样大小的矩形区域。也可以用 glViewport()函数来设置不同的视区,或在一个窗口内设置几个视区:

void glViewport( GLint x,GLint y,Glsizei width,Glsizei height) ; 功能: 在窗口中定义一个矩形区域,最终的图像将映射到该区域中。 参数说明: x,y:指定视区在窗口中的左下角位置。 width,height:指定视区的宽度与高度。

Page 24: 第 8 章  三维图形变换

8.5.5 裁剪变换

在 OpenGL中,三维对象的裁剪包括观察体裁剪与附加平面裁剪两类。在观察体裁剪中,所有位于观察体之外的图形将被裁剪掉,裁剪平面即为观察体边界的六个平面。除了这六个裁剪平面之外,用户还可以自己定义裁剪平面,以便进一步限制观察体。

裁剪平面由方程: 的系数确定。裁剪平面自动地进行适当的观察模型变换,使裁剪体成为观察体与附加裁剪平面所定义的半空间的交集。

0 DCzByAx

Page 25: 第 8 章  三维图形变换

8.5.6 矩阵堆栈

堆栈是一种先进后出的计算机数据结构,在前面所介绍的矩阵操作函数如 glLoadMatrix()、 glMultMatrix()以及模型变换视图变换等函数都是处理当前矩阵的,也就是位于栈顶的矩阵。这样我们就可以使用堆栈操作命令来控制位于栈顶的矩阵。而决定当前堆栈的是 glMatrixMode()命令。