图形学02 - 奇奇怪怪的2D、3D变换

1,888 阅读4分钟

前言

本篇主要对计算机图形学中变换的知识点进行总结,描述了2D变换、齐次坐标、组合变换、三维变换等的一些使用。同时,感谢令琪大佬的醍醐灌顶的授课。

图形学系列文章:

为什么要学习变换

  • 可以用于建模
  • 查看从3D世界到2D平面的投影变换

变换在动画,成像以及各方面都得到广泛的应用,这就是我们为什么要学习它。

2维变换

  • 使用矩阵表示变换 (线性变换)
  • 旋转、缩放、剪切

缩放变换

image.png

image.png

矩阵的写法形式:

image.png

反射变换

image.png

表示:

image.png

矩阵的写法形式:

image.png

剪切变换

image.png

提示:

  • 水平位移在 y=0 处为 0
  • 水平位移在 y=1 处为 a
  • 垂直位移始终为 0

矩阵的写法形式:

image.png

旋转变换

image.png

默认是(0,0)点,顺时针旋转

旋转矩阵:(基于线性变换,相同的维度)

image.png

image.png

image.png

齐次坐标

平移变换场景:

image.png

image.png

平移不能以矩阵形式表示,只能是这样:

image.png

所以,平移不是线性变换

但我们不希望平移变换成为一个特殊的变换。

是否有一种统一的方式来表示所有的变换?

齐次坐标的解决方案

添加第三个坐标

image.png

平移变换

平移的矩阵表示:

image.png

如果结果的 w 坐标为 1 或 0 则有效操作

image.png

在齐次坐标中,

image.png

仿射变换

仿射变换 = 线性映射 + 变换

image.png

利用其次坐标

image.png

利用齐次坐标表示缩放旋转平移(2维)

image.png

就平移来说,用一个矩阵,可以把线性变换的部分(2x2),和平移这一部分都统一的写成矩阵的形式。

这样一来,我们用其次坐标,就可以各种不同的变换写成同一个。

统一的表示形式,而代价就是引入了额外的数字,任何一个点(x,y)都写成了(x,y,1)。任何一个向量(x,y)都写成了(x,y,0)。

逆变换

就是把一个变换的操作反过来,就是逆变换。

是矩阵和几何意义上的变换的逆矩阵。

image.png

变换组合

image.png

变换顺序问题

不同的变换顺序,影响结果。

方案一:

先平移,后旋转

image.png

方案二:

先旋转,后平移

image.png

顺序不一样,得到的结果也不一样。

同理,矩阵乘的顺序不一样,结果不一样。

推导得出,矩阵不满足交换律。

image.png

向量乘以一个矩阵,矩阵应该放在左边,注意矩阵从右到左应用(从右向左乘)

image.png

组合公式

如仿射变换序列 A1, A2, A3, ...

• 通过矩阵乘法 • 对性能非常重要!

image.png

分解复杂的变换

如何围绕给定点 c 旋转?

  1. 将中心平移到原点
  2. 旋转
  3. 平移返回

image.png

矩阵表示:

image.png

3维变换

仿射变换

再次使用齐次坐标表示,线性变换和平移:

image.png

同样的道理,定义(x,y,z,w),只要w !=0, 就表示是一个点。

只有w = 1的情况下, 表示一个就是3维的点。

如果w != 1, w != 0,这个这时 想x,y,z同时除以w, 就变成w = 1的情况了。

(x/w, y/w, z/w)

使用4×4矩阵中为仿射变换:

image.png

在3维中表示变换:

image.png

围绕着x、y、z轴旋转拆解

image.png

围绕某一固定轴旋转:

image.png

  • 绕这x轴旋转,y和z都是在旋转的。但是任意一个点,它的x是不变的。
  • 绕z轴旋转,也是同上。
  • 绕y轴旋转,因为是右手螺旋定则,所以是z叉乘x得到y,所以如图y的矩阵看起来是反的。

任意绕轴旋转:

image.png

  • 分解为单一轴旋转;
  • 常用于飞行模拟:滚转,俯仰,偏航 (roll, pitch, yaw)

image.png

rodrigues的旋转公式:

旋转角度 α 绕轴 n

image.png

围绕任意轴旋转,而这个轴的起点并不在原点,做法是把所有的东西都移动,使得这个轴的起点为原点,然后再旋转,然后再把所有的东西都移回去。

四元数、万像锁的概念待查。

矩阵转置

旋转负角度a,就是把角度a,做了一个转置。

旋转角度a和旋转负角度a,正好是一个互逆的操作。

数学上,一个矩阵的逆等于它的转置,这个矩阵为正交矩阵

旋转矩阵里的逆,就等于旋转矩阵的转置。也就是说正交矩阵的转置等于正交矩阵的逆。

image.png