Games101-2-4 Math

Lecture 02 Review of Linear Algebra

a). Cross Product

cross

  • 判断相对的左右、前后、内外

    cross

  • 判断左右:如$ \vec{a} \cdot \vec{b} > 0$那 $\vec{b}$ 就在 $\vec{a}$ 的左侧(按图中的右手坐标系)

  • 判断内外:判断 $\vec{AB}$ 和 $\vec{AP}$ 的关系,可判断$P$ 点的在 $\vec{AB}$ 的左侧,同理可判断$P$ 在 $\vec{BC}$ 和 $\vec{CA}$ 的左侧,即均在向量同侧。由此,可判断$P$ 点的在 $ABC$ 的内部

b). Orthonormal Coordinate Frames(正交直角坐标系)

OCF

Lecture 03 Transformation

a). 2D Transformation

  • Scale Matrix

  • Reflection Matrix

  • Shear Matrix(切变矩阵)

    ShearMatrix

  • Rotation matrix(默认原点(0, 0), CCW/逆时针旋转)

    RotationMatrix

b). Homogeneous coordinates(齐次坐标)

  • To solve: 平移不是线性变换,无法用2*2矩阵表示(2D)

  • HomogenousCoord

    • 为什么点和向量的其次项不同?
      1. 向量具有平移不变性,齐次项为0可使其不受$t_x$、$t_y$的影响
      2. 考虑向量与点、向量/点之间的运算HomogenousCoord01
        • point + point得到两点的中点
    • 所有的仿射变换(Affine Transformation)都可以用齐次坐标系表示AT2HC
  • 复杂变换,如

    ComplexTransforms

c). 3D Transformation

3D_Transformations

  • 三维空间中使用齐次坐标的变换

上述矩阵先线性变换再平移,相当于:


  • 补充知识:正交矩阵

Lecture 04 Transformation Cont.

a). 3D变换

a.1) Scale、Translation

3d01

a.2) 3D Rotations

  • 旋转矩阵:

    3d_rotation

    • 注意绕y轴旋转和其他的区别($y=cross(z, x)$)

    • 三轴旋转可以表示3D空间的所有旋转变换,例如飞机(Roll、Pitch、Yaw

      RPY

  • 罗德里格旋转公式(表示绕任意经过原点轴的任意旋转)

    Rodrigues_Rotation

    • 默认旋转轴经过原点
    • $\left(\begin{array}{ccc}
      0 & -n_{z} & n_{y} \\
      n_{z} & 0 & -n_{x} \\
      -n_{y} & n_{x} & 0
      \end{array}\right)$是叉乘向量的矩阵形式
    • 四元数多是为了旋转之间的插值用的
  • 四元数待课后补充

b). Viewing Transformation

  • 概念:Viewing Transformation(观测矩阵)相当于MVP中的VP
    • View/Camera transformation
    • Projection transformation
      • Orthographic projection
      • Perspective projection

b.1) View Transformaiton

  • MVP_VP

  • Difine the camera:

    Difine_cam

  • View Space:

    • 相机位于原点,上是$Y$,看向$-Z$
    • 看成所有相机不动,全是其他物体动
  • $M_{view}$:
    • in math:
      • M_in_math01
      • M_in_math02
      • 直接应用矩阵空间变换

b.2) Projection transformation

这里的投影变换中对xyzw都乘了z,因此最后需要齐次除法(透视除法),转换到NDC(Normalized Device Coordinates)

b.2.1 Orthographic Projection

  • 简易理解:Orthographic Projection

    • 注意$[-1, 1]$
  • 图形学中的做法:Orthographic Projection In general

    • 通过平移将立方体中心化
    • 缩放成标准立方体(“canonical” cube)
    • 这里采用右手坐标系,缺点是$f<n$,远的z值小于近的z值
  • 矩阵形式:

  • Caveat:

    • (使用右手坐标系)看向 $-Z$ 使得$f<n$,远的z值小于近的z值
    • 这也是为什么OpenGL使用左手坐标系(但也会造成其他问题)

b.2.2 Perspective Projection

  • 前置知识:Recall_P_M

  • How to do perspective projection

    how_to_perspective_projection

  • 挤压(squish)

    squish

    squish02

    • $M_{\text {persp } \rightarrow \text { ortho }}=\left(\begin{array}{cccc}
      n & 0 & 0 & 0 \\
      0 & n & 0 & 0 \\
      ? & ? & ? & ? \\
      0 & 0 & 1 & 0
      \end{array}\right)$
    • 不知道经过挤压后$z$的变化(即第三行乘以$\left(\begin{array}{l}
      x \\
      y \\
      n \\
      1
      \end{array}\right)$未知),但知道:
      • 在近平面的点不会变化
      • 在远平面的中点不会变化
    • $z=n$时,$\left(\begin{array}{l}
      x \\
      y \\
      n \\
      1
      \end{array}\right) \Rightarrow\left(\begin{array}{l}
      x \\
      y \\
      n \\
      1
      \end{array}\right)==\left(\begin{array}{c}
      n x^{n} \\
      n y \\
      n^{2} \\
      n
      \end{array}\right)$
      • 易得$\left(\begin{array}{llll}
        0 & 0 & A & B
        \end{array}\right)\left(\begin{array}{l}
        x \\
        y \\
        n \\
        1
        \end{array}\right)=n^{2}$
      • $An+B=n^2$
    • $z=f$时,对于远平面中点,$\left(\begin{array}{l}
      0 \\
      0 \\
      f \\
      1
      \end{array}\right) \Rightarrow\left(\begin{array}{l}
      0 \\
      0 \\
      f \\
      1
      \end{array}\right)==\left(\begin{array}{c}
      0 \\
      0 \\
      f^{2} \\
      f
      \end{array}\right)$
      • 易得$\left(\begin{array}{llll}
        0 & 0 & A & B
        \end{array}\right)\left(\begin{array}{l}
        0 \\
        0 \\
        f \\
        1
        \end{array}\right)=f^{2}$
      • $Af+B=f^2$
    • 得$A=n+f$,$B=-nf$

    • $M_{\text {persp } \rightarrow \text { ortho }}=\left(\begin{array}{cccc}
      n & 0 & 0 & 0 \\
      0 & n & 0 & 0 \\
      0 & 0 & n+f & -nf \\
      0 & 0 & 1 & 0
      \end{array}\right)$

    • 之后进行平行投影的变换,得

      $\mathbf{M}_{\text {per }}=\left[\begin{array}{cccc}
      \frac{2 n}{r-l} & 0 & \frac{l+r}{l-r} & 0 \\
      0 & \frac{2 n}{t-b} & \frac{b+t}{b-t} & 0 \\
      0 & 0 & \frac{f+n}{n-f} & \frac{2 f n}{f-n} \\
      0 & 0 & 1 & 0
      \end{array}\right]$


【补充】

作业1中用到的绕任意轴旋转

rotation

  • 步骤:
    1. 将旋转轴平移至原点
    2. 将旋转轴旋转至YOZ平面
    3. 将旋转轴旋转至于Z轴重合
    4. 绕Z轴旋转θ度
    5. 执行步骤3的逆过程
    6. 执行步骤2的逆过程
    7. 执行步骤1的逆过程

rotation02

如果旋转轴是过原点的,那么第一步和最后一步的平移操作可以省略,也就是把中间五个矩阵连乘起来,再转置一下,得到下面的绕任意轴旋转的矩阵