Games101 笔记 Part1 图形学中的线性代数 Day2 矩阵与变换 Day3 观测变换——视图变换与投影变换

216 阅读2分钟

Day2 矩阵与变换

2D仿射变换

  • 线性变换 x' = M x

    • 缩放变换: [xy]=[sx00sy][xy]\begin{bmatrix} x^{'}\\y^{'} \end{bmatrix} = \begin{bmatrix} s_x&0\\0&s_y \end{bmatrix} \begin{bmatrix} x\\y \end{bmatrix}

      s_x为x的缩放倍数,s_y为y的缩放倍数;

    • 切片变换: [xy]=[1a01][xy]\begin{bmatrix} x^{'}\\y^{'} \end{bmatrix} = \begin{bmatrix} 1&a\\0&1 \end{bmatrix} \begin{bmatrix} x\\y \end{bmatrix}

    • 旋转变换: [xy]=[cosθsinθsinθcosθ][xy]\begin{bmatrix} x^{'}\\y^{'} \end{bmatrix} = \begin{bmatrix} cosθ&-sinθ\\sinθ&cosθ \end{bmatrix} \begin{bmatrix} x\\y \end{bmatrix}

      默认以原点按照逆时针方向旋转;

  • 平移变换:\begin{cases} x' = x + t_x\ y' = y + t_y\end{cases}

    • 用齐次坐标将加法合并为矩阵乘法(齐次坐标:将n维向量用n+1的向量维表示);
    • [xyw]=[10tx01ty001][xy1]\begin{bmatrix} x^{'}\\y^{'}\\w' \end{bmatrix} = \begin{bmatrix} 1&0&t_x\\0&1&t_y \\0&0&1\end{bmatrix} \begin{bmatrix} x\\y\\1 \end{bmatrix}

逆变换与组合变换

  • 变换与逆变换对应矩阵与逆矩阵;

  • 复杂的变换可以拆分成简单变换按顺序的组合(变换的顺序对应矩形乘法的逆序,详见例)。

  • 例1:image.png T(1,0)R45[xy1]=[101010001][cos45°sin45°0sin45°cos45°0001][xy1]T_{(1,0)} \cdot R_{45} \begin{bmatrix} x\\y\\1 \end{bmatrix} = \begin{bmatrix} 1&0&1\\0&1&0 \\0&0&1\end{bmatrix} \begin{bmatrix} cos45°&-sin45°&0\\sin45°&cos45°&0\\0&0&1 \end{bmatrix} \begin{bmatrix} x\\y\\1 \end{bmatrix}

  • 例2:image.png T(c)R(α)T(c)T(c) \cdot R(α) \cdot T (-c)

推广到3D

  • 缩放:[sx000sy000sz]\begin{bmatrix} s_x&0&0\\0&s_y&0 \\ 0&0&s_z \end{bmatrix}

  • 切片_沿X拉伸:[1dydz010001]\begin{bmatrix} 1&d_y&d_z\\0&1&0 \\ 0&0&1 \end{bmatrix}

  • 旋转:

    • 绕x轴:[1000cosθsinθ0sinθcosθ]\begin{bmatrix} 1&0&0\\0&cosθ&-sinθ \\ 0&sinθ&cosθ \end{bmatrix}
    • 绕y轴:[cosθ0sinθ010sinθ0cosθ]\begin{bmatrix} cosθ&0&sinθ\\0&1&0 \\ -sinθ&0&cosθ \end{bmatrix}
    • 绕z轴:[cosθsinθ0sinθcosθ0001]\begin{bmatrix} cosθ&-sinθ&0\\sinθ&cosθ&0 \\ 0&0&1 \end{bmatrix}
  • 平移+线性:[abctxdeftyghitz0001]\begin{bmatrix} a&b&c&t_x\\d&e&f&t_y \\ g&h&i&t_z \\0&0&0&1\end{bmatrix}

Day3 观测变换——视图变换与投影变换

旋转的描述

欧拉角

(默认以原点旋转)将任意的旋转分解成绕x、y、z轴的旋转:

Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)R_{xyz}(α,β,γ) = R_x(α)R_{y}(β)R_{z}(γ)

四元数

变换的过程

变换的目的——将三维物体映射到二维屏幕上

MVP变换

  • 模型变换——model transformation:调整物体
  • 视图变换——view transformation:调整相机
  • 投影变换——projection transformation:建立映射

视图变换

需要调整的参数:

  • 相机位置:原点——平移变换
  • 相机朝向:z轴负方向——旋转变换
  • 向上方向:y轴正方向——旋转变换

先平移后旋转即可

Mview=RviewTviewM_{view} = R_{view} T_{view}

因为视图变换相机需要带动场景中的所有物体一起变换,维持相对位置不变,所以模型变换和相机变换经常一起进行,被称为模型视图变换

投影变换

  • 正交投影——OrthographicProjectionOrthographic Projection

image.png

定义八方向参数:top,bottom,near,futher,left,righttop,bottom,near,futher,left,right

先平移后缩放即可

Mortho=SorthoTorthoM_{ortho} = S_{ortho} T_{ortho}

Mortho=[2rl00002tb00002nf00001][100r+l2010t+b2001n+f20001]M_{ortho} = \begin{bmatrix} \frac{2}{r-l}&0&0&0\\0&\frac{2}{t-b}&0&0 \\ 0&0&\frac{2}{n-f}&0 \\0&0&0&1\end{bmatrix} \begin{bmatrix} 1&0&0&-\frac{r+l}{2}\\0&1&0&-\frac{t+b}{2} \\ 0&0&1&-\frac{n+f}{2} \\0&0&0&1\end{bmatrix}

  • 透视投影——PerspectiveProjectionPerspective Projection

    • 先进行近大远小的处理:按z轴深度(观察角度)成比例缩放;
    • 后进行正交投影。