02 Transformation

02 Transformation

变换

线性变换

齐次坐标

缩放对称切变旋转,都是线性变换。但是平移变换不是线性变换,不能写成如上形式。

为了统一上面的五种变换方式,我们引入齐次坐标的概念。

用N+1维向量来表示N维坐标,用向量的最后一位数来指明是点还是向量(1表示点,0表示向量)。

对于二维坐标系来说:

  • 二维点 $(x, y, 1)^T$
  • 二维向量 $(x, y, 0)^T$

矩阵的变换可以表示为:

$\begin{pmatrix} x’ \\ y’ \\ w’ \end{pmatrix} = \begin{pmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} = \begin{pmatrix} x + t_x \\ y + t_y \\ 1 \end{pmatrix}$

这样的话,我们可以表示平移。同时通过1或者0也能轻易分辨点还是向量。

在这种情况下,有如下运算:

  • 点 + 点 = 点(表示两点的中点)
  • 点 + 向量 = 点(表示点沿着某个向量移动)
  • 向量 + 向量 = 向量
  • 点 - 点 = 两点构成的向量

此外,在齐次坐标中,$\begin{pmatrix} x \\ y \\ w \end{pmatrix} = \begin{pmatrix} x/ \\ y/w \\ 1 \end{pmatrix} $

齐次坐标的二维变换如下:

逆变换

​​​

  • 通常的旋转操作是绕坐标原点进行的。
  • 旋转矩阵的逆 = 旋转矩阵的转置。

复杂变换

复杂的变换可以拆分为多个简单变换的组合。一个符合条件的操作矩阵可以拆分为多个操作矩阵的乘积。

对向量或者点进行复杂变换时,对应的操作矩阵都是左乘运算。

矩阵的乘法不满足交换律:按照同样的数值,先平移再旋转和先旋转再平移,得到的结果很可能不一样。这也符合矩阵的乘法。

矩阵的乘法满足结合律:我们可以先将操作矩阵乘起来,最终合成为一个操作矩阵。

三维变换

平移变换

$T(t_x, t_y, t_z) = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix}$

缩放变换与反射变换矩阵

$S(s_x, s_y, s_z) = \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}$

旋转变换

$R_x(\alpha) = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos \alpha & -\sin \alpha & 0 \\ 0 & \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \\ R_y(\alpha) = \begin{bmatrix} \cos \alpha & 0 & \sin \alpha & 0 \\ 0 & 1 & 0 & 0 \\ -\sin \alpha & 0 & \cos \alpha & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \\ R_z(\alpha) = \begin{bmatrix} \cos \alpha & -\sin \alpha & 0 & 0 \\ \sin \alpha & \cos \alpha & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}$

上面的旋转公式是绕坐标轴旋转,当绕任意轴旋转时:

  • 如果这个轴的起点不在原点,先整体平移到原点,旋转之后再平移回去

MVP变换

模型变换

Model Transformation

将每个模型的的顶点坐标从局部坐标系变换到世界坐标系

视图/相机变换

View Transformation/Camera Transformation

在场景中放置相机。我们规定摄相机的位置始终处于原点,向上的方向是y轴,看向-z轴。这样一来,我们定义好了相机的属性,即位置,垂直方向,视线方向。

视图变换则是将世界坐标系转换到摄像机坐标系

如果摄相机的属性不符合我们的定义,我们可以通过平移变换和旋转变换,将摄像机变换到初始位置。此时,其他所有的物体也应该进行同样的变换以保证相对位置不变。

投影变换

Projection Transformation

有两种投影变换:正交投影(orthographic projection)透视投影(perspective projection)

正交投影: 看向物体时将所有物体的z值归0,然后将物体平移并缩放到 [-1,1]^2之间。相机位置无限远,没有远近概念(忽略深度信息)。

这个原始的立方体可以视作我们规定的可视范围,分别代表屏幕的长度,宽度,深度。我们通过变换矩阵将给定的立方体变换到[-1,1]^3的标准立方体上,只需先平移,再缩放。

透视投影: 把视锥体压缩成一个长方体,能够体现近大远小的视觉特点。

我们希望对视锥体中的每一个点,乘以一个变换矩阵,即可将其变换为长方体中的点。除此之外,我们还规定,变换前后,远平面和近平面上的点的z轴不变。

经过推导可以得到变换矩阵:[图形学笔记]推导投影矩阵 - 知乎 (zhihu.com)

通过这个矩阵,我们可以把原来的透视投影的视锥体压缩为正交投影的视锥体(长方体)。

最后我们再乘上一开始求出来正交投影矩阵Morth就得到了透视投影矩阵

此外,视锥体压缩成长方体以后,内部的点的z值更偏向于远平面


02 Transformation
https://enlight3n.github.io/2025/01/06/GAMES101/02 Transformation/
作者
Enlight3n
发布于
2025年1月6日
许可协议