变换

二维变换

线性变换可用矩阵表示,即

[xy]=T[xy]\begin{bmatrix} x' \\ y' \end{bmatrix} = T \begin{bmatrix} x \\ y \end{bmatrix}

缩放 Scale

T=[sx00sy]T = \begin{bmatrix} s_x & 0\\ 0 & s_y \end{bmatrix}

镜像 Reflection

T=[rx?1:100ry?1:1]T = \begin{bmatrix} r_x ? -1 : 1 & 0 \\ 0 & r_y ? -1 : 1 \\ \end{bmatrix}

切变 Shear

T=[1a01]T = \begin{bmatrix} 1 & a \\ 0 & 1 \\ \end{bmatrix}

旋转 Rotation

T=[cosθsinθsinθcosθ]T = \begin{bmatrix} cos \theta & -sin \theta \\ sin \theta & cos \theta \end{bmatrix}

旋转矩阵推理过程

T=[ABCD]T = \begin{bmatrix}A & B \\ C & D \end{bmatrix}
首先带入(1, 0)点,旋转θ后坐标为(cosθ, sinθ), 即

A1+B0=cosθA \cdot 1 + B \cdot 0 = cos \theta
C1+D0=sinθC \cdot 1 + D \cdot 0 = sin \theta
得: A=cosθ,C=sinθA = cos \theta, C = sin \theta
同理, 带入(0, 1)点, 得出 T=[cosθsinθsinθcosθ]T = \begin{bmatrix}cos \theta & -sin \theta \\ sin \theta & cos \theta \end{bmatrix}

齐次坐标

为什么引入?

当前矩阵无法直接表示平移操作, 而是需要额外加另一个矩阵, 形如:

[xy]=[abcd][xy]+[txty]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} a & b \\ c & d \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} + \begin{bmatrix} t_x \\ t_y \end{bmatrix}

解决思路

添加一个坐标(w), 即:
2D 点: (x, y, 1)
2D 向量: (x, y, 0)
使用矩阵表示:

[xy1]=[abtxcdty001][xy1]\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

为什么加入1和0

保证如下几点

  • 向量 + 向量 = 向量 -> 向量加法
  • 点 - 点 = 向量 -> 向量定义
  • 点 + 向量 = 点 -> 点平移
  • 点 + 点 = ?? -> 无意义

扩充定义

[xyw]=[x/wy/w1]\begin{bmatrix} x \\ y \\ w \end{bmatrix} = \begin{bmatrix} x / w \\ y / w \\ 1 \end{bmatrix}

所以, 点 + 点在齐次坐标表示下, 为该两个点的中点

仿射变换 Affine Transformations

将线性变换和平移变换, 统称为仿射变换

逆变换

将变换的操作恢复原样的变换; 数学上, 变换后, 乘以该变换矩阵的逆矩阵

矩阵性质在图形学中的应用

  1. 矩阵乘法不满足交换律, 即变换的顺序会影响最终的结果
  2. 矩阵乘法满足结合律, 可以合并变换以优化性能, 即An(...(A2(A1x)))=(An...A2A1)[xy1]A_n(...(A_2(A_1\cdot x))) = (A_n ... A_2 \cdot A_1) \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

变换的分解

如: 以任意点为中心旋转

  1. 平移是中心点位于原点
  2. 旋转
  3. 将图形平移回原位置

即 T(c)R(α)T(-c)

系列说明


系列文章@Lingqi Yan(闫令琪) 教授《现代计算机图形学入门》 视频课程的文字笔记, 方便各位图形学爱好者朋友学习巩固使用

原课程链接: GAMES101: 现代计算机图形学入门
同时, 该教程已上传哔哩哔哩, 链接: GAMES101-现代计算机图形学入门-闫令琪

3D 变换

齐次坐标表示

3D 点 =(x,y,z,1)T= (x, y, z, 1)^T
3D 向量 =(x,y,z,0)T= (x, y, z, 0)^T
仿射变换

[xyz1]=[abctxdeftyghitz0001][xyz1]\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} = \begin{bmatrix} a & b & c & t_x \\ d & e & f & t_y \\ g & h & i & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}

*先应用变换, 再应用平移

系列说明


系列文章@Lingqi Yan(闫令琪) 教授《现代计算机图形学入门》 视频课程的文字笔记, 方便各位图形学爱好者朋友学习巩固使用

原课程链接: GAMES101: 现代计算机图形学入门
同时, 该教程已上传哔哩哔哩, 链接: GAMES101-现代计算机图形学入门-闫令琪

课件源文件: GAMES101_Lecture_03.pdf
哔哩哔哩视频传送门: GAMES101-现代计算机图形学入门-闫令琪