计算机图形学-GAMES101-3

一、transformation-变换

(1)Scale

  • 缩放变换示意图
    计算机图形学-GAMES101-3_第1张图片

  • 图形每个像素对应坐标的计算公式
    计算机图形学-GAMES101-3_第2张图片

  • 写成缩放矩阵的形式
    计算机图形学-GAMES101-3_第3张图片

  • 非均匀缩放
    计算机图形学-GAMES101-3_第4张图片

(2)Reflection Matrix

  • 镜面变换示意图
    计算机图形学-GAMES101-3_第5张图片

  • 图形每个像素对应坐标的计算公式
    计算机图形学-GAMES101-3_第6张图片

  • 写成镜像矩阵的形式
    计算机图形学-GAMES101-3_第7张图片

(3)Shear Matrix

  • 切变变换示意图
    计算机图形学-GAMES101-3_第8张图片

  • 写成切片矩阵的形式
    计算机图形学-GAMES101-3_第9张图片

(4)Rotate

  • 旋转变换示意图
    计算机图形学-GAMES101-3_第10张图片

  • 旋转默认以原点为旋转中心,旋转方式为逆时针旋转。计算机图形学-GAMES101-3_第11张图片

  • 旋转矩阵
    计算机图形学-GAMES101-3_第12张图片

(5)总结

  • 我们要做变换,就要找到变换前坐标和变换后坐标之间的一种关系,根据这种关系将原坐标变换为新坐标,并将坐标和变换写成矩阵形式。
    计算机图形学-GAMES101-3_第13张图片

二、齐次坐标

(1)平移

  • 平移变换示意图
    计算机图形学-GAMES101-3_第14张图片

  • 图形每个像素对应坐标的计算公式
    计算机图形学-GAMES101-3_第15张图片

  • 由于是相加,所以我们只能写成这种形式:
    计算机图形学-GAMES101-3_第16张图片

  • 可以发现平移变换不是线性变换,无法表述为之前变换的形式,即坐标矩阵乘以一个矩阵的形式。有没有一个办法可以统一的表示所有的变换方式呢?

(2)No free lunch

  • 没有付出就没有收获,诸如动态规划是一种用空间换时间的求解算法,想要更好的表达方式,就需要牺牲一些东西。使用齐次坐标即可统一表述方式。

  • 使用齐次坐标实现平移变换。计算机图形学-GAMES101-3_第17张图片

(3)齐次坐标的介绍

  • 点和向量齐次坐标的表示,向量w=0代表了向量的平移不变性。
    计算机图形学-GAMES101-3_第18张图片

  • 也表述了向量+向量=向量、点-点=向量 等运算规则。
    计算机图形学-GAMES101-3_第19张图片

  • 扩展齐次坐标下点w分量的含义
    计算机图形学-GAMES101-3_第20张图片

三、齐次坐标的变换

(1)变换

  • Affine Transformations计算机图形学-GAMES101-3_第21张图片

  • 任何一个 Affine Transformations都可以写为变换矩阵形式。
    计算机图形学-GAMES101-3_第22张图片

  • 变换对应的矩阵
    计算机图形学-GAMES101-3_第23张图片

(2)逆变换

  • 逆变换对应原变换矩阵的逆矩阵(AM=B,AM-M=B-M,A=B-M)。
    计算机图形学-GAMES101-3_第24张图片

(3)变换顺序的讨论

  • 变换的顺序:缩放->旋转->平移。因为定义旋转是围绕原点,所有必须保证旋转时未经过平移,因此旋转在平移之前。因为定义缩放一般是我们针对原图形进行的横纵向缩放,即缩放时我们认为图形的横向为x轴纵向为y轴,而旋转会导致图形横向和纵向偏移,所以缩放需要在旋转之前进行。

  • 所有任何复杂的变换都可以通过这些基本变换得到,即定义在一个变换矩阵中。如果当对图形进行过旋转和平移了,还想对其进行缩放,可以先将图形逆变换到缩放阶段,然后执行缩放变换,再执行原本的旋转和平移变换即可。

  • 注意矩阵乘法类似于函数映射y=F(x),所以变换矩阵M和位置矩阵x的乘法为Mx,为左乘。对坐标的变换如下图,会从右到左依次应用各个变换矩阵。
    计算机图形学-GAMES101-3_第25张图片

  • 矩阵从右到左逐个应用。也可也认为是,从An×A(n-1)×…×A1=M,即计算出变换矩阵M应用到坐标上。
    计算机图形学-GAMES101-3_第26张图片

  • 如果有一个变换,它要求基于原点以外一个点旋转,或者是要求基于x轴和y轴以外的轴进行缩放,那该怎么办?对于绕原点以外的点旋转,我们只需要平移物体,使得旋转点平移到原点(保证了旋转点和物体的相对位置不变),再开始绕着原点旋转,这样就得到了应该旋转得到的效果,只不过我们还要将物体平移回去而已。而对于缩放也是一样,我们将旋转轴旋转到x轴上,进行x轴上的缩放,然后再旋转回原本的缩放方向即可。注意变换矩阵是从右到左的变换顺序。
    计算机图形学-GAMES101-3_第27张图片

  • 存在变换顺序是因为变换的规则是固定的,而针对上述本身就打破了变换规则的变换,需要打破变换顺序才可以得到实现。但是无论在任何时候,我们想要旋转物体,只需要保证旋转中心在原点,我们需要缩放物体,只需要保证缩放轴在x或y轴上。这样我们可以先通过简单的变换使得旋转中心在原点或者缩放轴在x轴上,我们即可实施不规则的旋转或缩放。任何变换都是有对应的关系的,如果你能设计出一种变换关系,那你也可以不基于这些基本的变换,比如之间绕某个点旋转。

四、三维变换

(1)三维的齐次坐标

  • 添加z坐标即可。计算机图形学-GAMES101-3_第28张图片

  • w不等于0,则点的坐标为:
    计算机图形学-GAMES101-3_第29张图片

  • 三维变换矩阵,其中3X3为线性变换,旁边一列为平移变换计算机图形学-GAMES101-3_第30张图片

  • 变换的顺序,上图矩阵等价下图计算过程,因此变换顺序也是先线性变换后平移。
    计算机图形学-GAMES101-3_第31张图片

你可能感兴趣的:(GAMES101,计算机图形学,GAMES101,CG)