《GAMES101-现代计算机图形学入门》-03~04“Transformation”学习笔记

目录

Lecture 03 • Transformation

1) 为什么学习变换

a) Modeling

b) Viewing

2) 二维变换

a) Scale(缩放)

b) Rotate(旋转)

3) 齐次坐标(Homogeneous coordinates)

a) 为什么要引入齐次坐标

b) 齐次坐标的使用

4) 逆变换(Inverse Transform)

5) 变换的顺序

6) 三维变换

a) 变换公式

b) 三维的旋转

Lecture 04 • Transformation Cont.

补充

1) Viewing Transformation(视图变换)

a) 什么是视图变换

b) 如何表现视图变换

c) 总结

2) Projection Transformation(投影变换)

a) Orthographic projection(正交投影)

b) Perspective projection(透视投影)


Lecture 03 • Transformation

1) 为什么学习变换

变换可以使静态的物体平滑的运动起来,在动画、游戏等很多方面得到了广泛的应用

a) Modeling

变换包含物体自身的缩放、旋转、平移

b) Viewing

变换还包含三维世界到一幅二维图像的投影(视口变换)

2) 二维变换

a) Scale(缩放)

通过一个对角矩阵可以将物体的x和y都缩放为原来的一半

x和y也可以进行不均匀的缩放

我们还可以巧妙的实现“镜像”等效果

保持垂直方向不做变换,根据y值的不同,使点在水平方向变换的距离(在0和a之间)不同,可以做到切变(Shear)的效果

b) Rotate(旋转)

在未设定旋转轴和旋转方向时,旋转默认是绕原点逆时针旋转

因为旋转矩阵对任一点都满足条件,所以我们可以取左上角和右下角这两特殊点的坐标,对它们的变换列方程组求解出矩阵公式

到这里我们可以发现,对一个坐标进行线性变换可以表示为坐标左乘一个同维矩阵

3) 齐次坐标(Homogeneous coordinates)

a) 为什么要引入齐次坐标

平移变换无法同旋转和缩放一起在一个变换矩阵中表示,只能单独补充(平移变换并不是线性变换),所以我们想设计一种方法使得三种变换在同一个矩阵中实现,而这一方法则通过齐次坐标完成

b) 齐次坐标的使用

通过增加一个w分量,我们便可以将三种变换在一个矩阵中实现,但应当注意的是,二维的点和二维的向量之间,w分量是有差异的

因为向量具有平移不变性,我们希望它的其它分量不会受到平移变换的影响,所以向量的w分量被定义为0。plus,将点和向量的w分量分别定义为1和0,使得我们做点和点之间,向量和向量之间,点和向量之间的运算时,w分量的运算也是有意义的(如一个点加上一个向量,结果仍是一个点,对应w分量为1+0=1,所得结果为1符合定义)

需要注意的是,从我们的经验看,点和点的相加是没有意义的(它们的w分量相加也不是1和0了),但是我们对此给出了定义:在齐次坐标的表示下,将一个点的所有分量同时除以w分量的值(w不为0)便可得到该点对应在笛卡尔坐标中的表示。这时,点和点相加获得的坐标在同时除以w分量的值后也就有了意义,即指两个点的中点(点和点相加可以指多个点)

结合前面所述,我们可以得到三种变换在齐次坐标下的表示


4) 逆变换(Inverse Transform)

逆变换指一个变换的逆过程,在数学上是乘以变换矩阵的逆矩阵

5) 变换的顺序

由上图我们可以看出,变化的顺序不同,得到的结果是不同的。这一点也和矩阵的乘法有关(矩阵乘法不满足交换律)

因为我们一般使用的是列向量,所以矩阵需要左乘列向量,则我们在乘上变换矩阵时应当从右向左依次相乘(如下图)

对于一些复杂的变换,我们可以将其拆解,比如使得物体绕一个给定点c旋转:先将物体平移至原点,绕原点旋转,再逆变换平移回去

6) 三维变换

三维变换同二维变换很像,只是多了一个z分量

a) 变换公式

缩放和平移

绕不同轴旋转(我们可以发现公式中的规律:矩阵中旋转轴对应的行和列不变,绕y轴的旋转矩阵因叉乘的方向会和其他两个有所差异)

b) 三维的旋转

三维空间中旋转的任一角度都可以用三个参数roll、pitch、yaw来表示

这里引入了Rodrigues Rotation Formula(罗德里格旋转公式)表示绕任一旋转轴n旋转ɑ角度的矩阵(旋转轴n未过原点时可以先将其起点平移到原点)


Lecture 04 • Transformation Cont.

补充

对于上一节二维变换中的旋转矩阵,作出了以下补充:旋转-θ角度的矩阵与旋转θ角度的转置相同,而旋转-θ角度又与旋转θ角度互为逆过程,所以我们可以得到旋转矩阵的转置等于它的逆矩阵,即旋转矩阵是正交的

1) Viewing Transformation(视图变换)

a) 什么是视图变换

一个三维虚拟世界,如何呈现在二维平面中?这一过程就是通过视图变换实现的

b) 如何表现视图变换

首先我们需要定义相机的位置、相机的朝向、以及相机朝向的正交方向

如果让相机和物体同步变换,那么我们得到的二维画面将是相同的。我们可以将相机始终放置在原点,朝向-Z方向,这时再对物体进行变换就可以得到我们需要的画面

要使相机位置满足上述条件,我们需要使用如下变换

用矩阵的形式表示如下,需要注意的是在进行旋转变换时,将一个特定的方向旋转到一个规范化方向,如(0, 0, 1)比较困难,因此我们可以使用其逆变换,将一个规范化方向旋转到我们需要的方向,这样会使我们的计算方便许多,又因为旋转矩阵是正交的,我们再将所得矩阵求转置,就可得到我们需要的变换矩阵

c) 总结

视图变换也被称为模型视角变换,我们将相机移动到满足条件的位置后,再对物体和相机一同变换,就可以使物体达到我们需要的位置

2) Projection Transformation(投影变换)

a) Orthographic projection(正交投影)

正交投影可以简单的理解为:先将相机移到原点并使其满足条件,舍弃z坐标,然后将物体的坐标通过平移和缩放变换到单位坐标系中

一般来说,我们会将需要投影的长方体(相机的视野范围)映射到一个标准立方体中(先平移到原点,再进行缩放)

数学方式表示如下

值得注意的是,因为我们使用的是右手坐标系,由近到远是沿着-z的方向移动的,所以近处的z值会大于远处的z值,这一点同OpenGl等使用左手系不同

b) Perspective projection(透视投影)

透视投影中相机的视野范围是由远近平面围成的四棱台(远平面大于近平面),我们先将四棱台“挤压”成标准立方体(这一过程需要保持近平面不变,远平面z坐标不变),再进行正交投影即可

我们如何实现透视投影到正交投影的“挤压”呢?首先我们从侧面观察视锥体,可以发现远平面上的点与近平面上的点的y坐标存在一个相似三角形的关系(x坐标同理)

此时我们已经可以将变换后的坐标大概表示出来了,但是z坐标还没法得到

我们也可以大概写出这个“挤压”矩阵了,但我们仍需要求出对于z坐标的变换

思考前面提到的变换的要求:在近平面和远平面上的点在变换后z坐标均不会改变。利用这个条件我们可以对远近平面分别列出一个方程

将两个方程组成的方程组解出,我们就可以得到变换矩阵的第三行。到此,我们就完成了透视投影的推导:先通过“挤压”矩阵将视锥体变换成可以用于正交投影的标准立方体,再进行正交投影即可

至此Transformation的部分就暂时告一段落了

课程传送门:

Lecture 03 Transformation_哔哩哔哩_bilibili

Lecture 04 Transformation Cont._哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值