华科_图形学笔记_06_变换与观察

计算机图形学_华中科技大学_中国大学MOOC(慕课)


6.1_神奇的齐次坐标

回顾几何阶段

几何阶段包括顶点着色器、几何着色器、裁剪和屏幕映射四个部分。其中顶点着色器所做的工作,包括模型变换、视图变换和顶点着色。几何着色器,则是进行顶点的增删。

接下来,为了便于裁剪,还需要进行规范化的投影变换。

裁剪之后就可以直接进行屏幕映射了。

显然,几何阶段经历了从建模坐标系、世界坐标系、观察坐标系到屏幕坐标系的转换。

除了这些坐标系的变换,模型本身还会运动。比如这里的两个模型,一个向上运动,一个向下运动。

另外,观察者也可能会运动。

其实以上各种变换都可以通过几何变换来完成。那么,

图形的几何变换是指对图形的几何信息经过平移、比例、旋转、对称、错切等变换后产生新的图形。

下面,让我们以二为变化为例来学习这些变化。

首先是平移。平移,是指将点P沿直线路径从一个坐标位置移到另一个坐标位置,这是一个重定位过程。它不会产生变形。所以它是一种刚体变换

那么这里的X和XY就称为比例系数。

 可是旋转,就比较复杂了。它是把P点绕坐标原点转动θ角度后,得到新的P'的一个重定位过程。

那么对于这个角度,在图形学中,将逆时针作为正方向,而顺时针作为负方向。

对称变换后的图形是原图形关于某一个轴线或原点的镜像。

错切,也称为剪切错位变换,用于产生弹性物体的变形处理

好了,以上就是五种基本的几何变换。我们可以看出,每一种计算的形式都是不同的。这样一来,一个是计算形式不统一,另一个如果存在多次变换进行复核的时候,计算就更加复杂了。那么有没有一个方法可以把这些形式统一起来?这里就引入了齐次坐标。

齐次坐标技术,是从几何学发展起来的。因为有时在N维空间中较难解决的问题,变换到N加一维空间中比较容易得到问题的解答。

所谓齐次坐标表示,就是用N加一维向量表示一个N维向量。例如,在二维平面中,点PXY的齐次坐标表示,就是p[hx,hy,h]。这里的H,是任意一个不为零的比例系数。

类似的三维空间中,坐标点的齐次坐标表示,就为[hx,hy,hz,h]。

N维空间中用非齐次坐标表示一个点的向量,具有N个坐标分量

以二维坐标系下的点P(4,3)为例。

那么保证其唯一性的方法,是定义规范化的齐次坐标表示。

规范化的齐次坐标表示,就是H等于一的齐次坐标表示。

在定义了规范化的齐次坐标表示之后,图形变换就可以表示为图形点集的规范化齐次坐标矩阵与一个变换矩阵进行矩阵相乘的形式。

那么引入了规范化的齐次坐标表示以后,二维空间中某点的变换就可以表示成点的齐次坐标与三阶的二维变换矩阵T2D相乘。就是这样的形式.....其中T2D就是二维齐次坐标变换矩阵,简称二维变换矩阵,它是一个三乘以三的矩阵。

从功能上,我们可以把这个矩阵分为四个子矩阵

其中左上角的T1是对图形进行比例旋转,对称错切这些变换的。

T2是对图形进行平移变换的。 

T3是对图形做投影变换的

T4则可以对图形做整体的比例变换。

刚才对于变换的计算,可以得到平移、比例旋转对称、错切相应的变换矩阵

进行的公式推导,那如果有多个点,或者我们需要变换多次,只有一行,实际上有几点就可以对应几行。第二,如果是多次变换,这里的T就可以变成多次变换对应矩阵的乘积。

到这里我们发现,通过引入齐次坐标技术,我们完全可以把图形的变换转换为表示图形的点集矩阵与变换矩阵进行矩阵相乘的问题。

 这种方法统一了计算形式,利于复合变换。而且这种矩阵运算的方式还可以借助计算机的高速计算功能,很快的得到变换后的图形,从而为高动态的计算机图形显示提供可能性。


6.2_三维模型动起来

提纲

基本三维变换

三维齐次坐标

齐次坐标表示就是用n=1维向量表示一个n维向量

其实,有关二维图形几何变换的讨论基本上都适合于三维空间,只不过三维空间的几何变换要复杂得多。

也就是说,三维空间中某点的变换可以表示成点的齐次坐标与四阶的三维变换矩阵相乘。

和二维变换为例,根据T3D在变换中所起的作用。我们可以把T3D分成四个子矩阵

T1,是一个三乘以三阶的子矩阵,它的作用是对点进行比例对称、旋转、错切变换。

T2,是一个一行三列的子矩阵,作用是对点进行平移变换。

T3,是一个三乘以一节的子矩阵,作用是进行透视投影变换。

T4,是一个一乘一阶的子矩阵,作用是产生整体比例变换。

基本的三维变换

平移

比例

整体比例变化没有什么变化,仍然是在这里的S在起作用,而且,也是S大于一的时候,反而是整体缩小。

旋转就比较复杂了,三维旋转变换可以看成是二维旋转变换的组合,分别取XYZ作为旋转轴,让每个旋转轴的三维旋转可以看成是在另两个坐标轴组成的二维平面上进行的二维旋转。将二维旋转变换组合起来,就得到了总的三维旋转变换了。需要说明的是,当沿坐标轴往坐标原点看过去的时候,沿逆时针方向旋转的角,是正向旋转角,所以实际上满足右手定则,也就是,用大拇指指向围绕旋转的轴向,而这时候四指转的方向,就是正方向。

那么回顾之前的二维变换。如果我们把隐藏的这个Z轴加入,是不是可以根据右手定则认为逆时针的方向是正方向?

下面我们就来看一下在三维空间中,绕Z轴、X轴和Y轴的旋转会怎样。首先,绕Z轴旋转,这时候Z的坐标不变,而XY变化正好,就从二维的正向旋转一样。这样我们就可以得到三维点绕Z轴正向旋转θ角度的计算形式,是这样的一个矩阵。同理,我们也可以推导出绕X轴、绕Y轴旋转的变换矩阵,分别看一下它的矩阵形式。这就是旋转变换。

对称变换后的图形,仍然是原图形关于某一轴线,某一坐标平面或原点的镜像,注意这里增加了一个坐标平面。但是变换矩阵仍然十分简单

可以看一看,比如关于坐标平面的对称变换,我们已关于Xoy平面对称为例

这个时候,XY都不变,只有Z取反了。所以,矩阵的对角线上,只有第三行,第三列为-1,其余,保持单位矩阵不变。

同样,我们可以推出相对于坐标轴或者坐标原点的对称变换矩阵。而对于用于产生弹性物体的变形处理的错切,在三维空间中就可以沿XYZ_3个方向发生错切位移。比如如果有一个X方向上的错切。这时点的YZ都不变,可是X值叠加了一个与YZ相关的增量,也就是x'=x+dy+gz,而其他方向上,也是同样的道理。以上,就是几种基本变换推广到三维后的结果。

再来看一个变化,那就是逆变换。

所谓逆变换,就是与上述变换过程相反的变换。

比如说对于平移比例和旋转分别是怎样的?我们来看一下。

首先来看看平移的逆变换。平移的逆变换当然就是反向平移了,将平移后的点移回到原处。那么变换矩阵中,它的相应的平移矢量,就与原来是相反数。

比例的逆变换:它是把比例变化后的点,变换回原来的尺寸。

局部比例变换的逆变换矩阵中,比例因子,那肯定就是原来的导数。而整体比例变换的逆变换矩阵中。S,当然也是原来的导数。

旋转变换的逆变换,很显然,我需要把它反向旋转回去,也就是说,你绕哪个轴的旋转,只要用对应的-θ代替,就可以得到对应的逆变换矩阵了。

无论是二维变换还是三维变换。我们都会发现,其实都是基本的几何变换。

因为这些变换都是相对于坐标原点和坐标轴进行的几何变换。可是,有的时候有这样的一种需要,也就是需要相对于任意点任意轴进行变换。

这里就需要用到复合变换。

三维复合变换是指图形做一次以上的几何变换。

那么现在,我们就以复合变换的思想来分析一个相对于任意参考点F的三维变换。好了,既然我们只能相对于原点进行变换。

那么我们是不是可以这样考虑?我们把这个点移动到原点。然后,该怎么变换,就怎么变换,变化完了之后,再移回去。也就是说,把这个过程分成了以下三个步骤。

第一个,将参考点F移至坐标原点,这时候进行一个平移变换。

第二个,针对原点进行相应的二维几何变换。

第三个,就是进行反平移,将参考点F又移回到原来的位置。

这里的反平移就是原来平移的逆变换,所以大家大概可以明白逆变换引入的目的。


6.3_观察者也能动

提纲

其实有了之前相对于任意点的变换,我们会得到一些启发,那就是既然我们只会绕轴旋转

同时我们也可以想见,这个过程要复杂许多。要想让轴靠近坐标轴,首先把它往轴上靠。所以可以先把AB进行平移,让a点与坐标轴重合,这样一来,AB就到了O'B上了。这个时候就对应着这个变换矩阵Ta。

接下来,就要进行旋转。显然我们首先要让它落到某个坐标平面上。

我们可以绕着X轴正传阿尔法角,就可以把OE'B转动到了XOZ平面上。那么BE'点是点B在对应平面上的投影。

那么这个平面,与Z轴的夹角,就是阿尔法。

我们这里可以沿BE’点分别对Y轴和Z轴作垂线。那么垂点分别就是D和E。我们就可以算出阿尔法的余弦值是这样的,而正弦值,就是这个式子。

考虑到OE'B的方向数是ABC,因此,就OE'等于C

到了坐标平面上,就好办了。这时候,只需要将它绕Y轴反转贝塔角,就可以把这里的OE'和BE'转动到Z轴上了。和刚才的方法类似,我们可以很快的求出贝塔的余弦和正弦值,然后就可以得到对应的变换矩阵TRy。这个时候,已经把AB轴转动到Z轴上了。所以,之前说的旋转就变成了绕Z轴的旋转。

接下来,就是之前变换的逆变换了。对于矩阵运算来说,T1乘以T2的逆等于T2的逆乘以T1的逆,所以之前的ta/trx/try的逆就是try的逆乘以TRX的泥,再乘以Ta的逆。

总之我们最终得到了相对于ab轴的旋转变换矩阵trab这样的一个计算式

观察者也能动 

之前的课程讲的是三维模型,动起来指的是模型本身在世界坐标系中的运动。

我们用矩阵运算的方法进行了解决。那么在实际生活中,还可以移动观察点和改变观察方向,以便在不同的距离和角度上观察物体。

这就是我们今天要说的,观察者也能动。而这里对应的变换,实际上也就是视图变换。

怎么变化?首先,我们对观察坐标系进行定义,这里的点P0/X0/Y0/Z0就是观察参考点,它是观察坐标系的原点,一般认为,就是视点。

如果我们观察物体的焦点在这个P点上,那么P/P0就是观察坐标系ZV轴的方向。显然,焦点不同也就是P不同,ZV轴也就不同了。

Yv_对于我们观察的正方向,就像我们给一个人拍照,可以正着拍,也可以斜着拍,那么这里的正方向,就是YV。

有了两个方向,按照右手系的规则就可以定义出XV了。这样,我们就可以定义出观察参考坐标系了。

而我们要进行的观察变换,也叫视图变换,实际上,就是把世界坐标系变换到观察坐标系中。

以这里的点Q为例,实际上,是求出世界坐标系中点Q(XYZ)在观察坐标系中的坐标值。

大家应该有点联想到刚才的绕任意轴旋转了,的确有些相似

先要平移观察参考点到用户坐标系原点

然后进行旋转变换,分别让XV,YV和ZV轴对应到用户坐标系中的XY和Z轴就可以了呢?

的确跟刚才的Trab的计算有些类似。

对于平移,我们很快可以求出它的平移矢量,分别是负的X0,负的Y0和负的Z0。而旋转,我们可以把YV转动到Y轴,然后再绕Y轴旋转,让xv和zv分别与X轴、Z轴重合。

好不容易求出来的值,不能在逆变换回去了

在实际的应用中,模型变换域观察变换具有对偶性

也就是模型动,我们看到的就动;而模型不动,观察者动,我们看到的景物也发生了变化

但很多时候,世界坐标系,也就说用户坐标系中,存在多个模型, 有的静止,有的运动,这样一来,再结合观察者在场景中的漫游,就可以看到各种不同的景象了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值