Bootstrap

games101 笔记 04 Transformation Cont

概述

  1. 变换续(模型、视图、投影)
  2. 三维变换
  3. Viewing (观测) transformation
    1. View (视图) / Camera transformation(摄像机和视图变换)
    2. Projection (投影) transformation(3D→2D)
      1. Orthographic (正交) projection
      2. Perspective (透视) projection

三维变换

  1. 使用齐次坐标表示
    1. 3D point = ( x , y , x , 1 ) T (x, y, x, 1)^T (x,y,x,1)T
    2. 3D vector = ( x , y , z , 0 ) T (x, y, z, 0)^T (x,y,z,0)T
  2. 使用4x4矩阵表示仿射变换 ( x ′ y ′ z ′ 1 ) = ( a b c t x d e f t y g h i t z 0 0 0 1 ) ⋅ ( x y z 1 ) \begin{pmatrix} x'\\ y'\\ z'\\ 1 \end{pmatrix} = \begin{pmatrix} a & b & c & t_x\\ d & e & f & t_y\\ g & h & i & t_z\\ 0 & 0 & 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} x\\ y\\ z\\ 1 \end{pmatrix} xyz1 = adg0beh0cfi0txtytz1 xyz1 线性变换在前,平移变换在后(同2D变换)
  3. 缩放 S ( s x , s y , s z ) = ( s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 ) \mathbf{S}(s_x, s_y, s_z) = \begin{pmatrix} s_x & 0 & 0 & 0\\ 0 & s_y & 0 & 0\\ 0 & 0 & s_z & 0\\ 0 & 0 & 0 & 1 \end{pmatrix} S(sx,sy,sz)= sx0000sy0000sz00001
  4. 平移 T ( s x , s y , s z ) = ( 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ) \mathbf{T}(s_x, s_y, s_z) = \begin{pmatrix} 1 & 0 & 0 & t_x\\ 0 & 1 & 0 & t_y\\ 0 & 0 & 1 & t_z\\ 0 & 0 & 0 & 1 \end{pmatrix} T(sx,sy,sz)= 100001000010txtytz1
  5. 绕轴旋转 R x ( θ ) = ( 1 0 0 0 0 cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 )  ,右手螺旋法则y-z-x \mathbf{R}_x(\theta) = \begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & \cos\theta & -\sin\theta & 0\\ 0 & \sin\theta & \cos\theta & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}\text{ ,右手螺旋法则y-z-x} Rx(θ)= 10000cosθsinθ00sinθcosθ00001  ,右手螺旋法则y-z-x R y ( θ ) = ( cos ⁡ θ 0 sin ⁡ θ 0 0 1 0 0 − sin ⁡ θ 0 cos ⁡ θ 0 0 0 0 1 )  ,右手螺旋法则z-x-y \mathbf{R}_y(\theta) = \begin{pmatrix} \cos\theta & 0 & \sin\theta & 0\\ 0 & 1 & 0 & 0\\ -\sin\theta & 0 & \cos\theta & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}\text{ ,右手螺旋法则z-x-y} Ry(θ)= cosθ0sinθ00100sinθ0cosθ00001  ,右手螺旋法则z-x-y R y ( θ ) = ( cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 0 0 0 0 1 )  ,右手螺旋法则x-y-z \mathbf{R}_y(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 & 0\\ \sin\theta & \cos\theta & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}\text{ ,右手螺旋法则x-y-z} Ry(θ)= cosθsinθ00sinθcosθ0000100001  ,右手螺旋法则x-y-z
  6. 任意的3D旋转都可以转化为 R x 、 R y 、 R z R_x、R_y、R_z RxRyRz R x y z ( α , β , γ ) = R x ( α ) R y ( β ) R z ( γ ) \mathbf{R}_{xyz}(\alpha,\beta,\gamma) = \mathbf{R}_{x}(\alpha) \mathbf{R}_{y}(\beta) \mathbf{R}_{z}(\gamma) Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)
  7. 齐次坐标并不适合做插值,而四元数适合
  8. Rodrigues’ Rotation Formula(罗德里格斯旋转公式 )推导过程外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

视图变换

摄像机位置-what

  1. 定义摄像机位置外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 总是要将摄像机移动到原点,Y轴为向上,朝-Z观看

  3. 物体随着摄像机旋转

怎么旋转-how

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

怎么旋转-do

  1. 先平移到原点,写平移矩阵坐标 − e ⃗ -\vec{e} e
  2. 写旋转矩阵
    1. 直接写旋转矩阵不好写,可以先写逆矩阵
    2. 逆矩阵转置就是旋转矩阵(旋转矩阵为正交矩阵,旋转矩阵的逆矩阵就是转置矩阵)
视图变换矩阵*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

投影变换(3D→2D)

  1. 正交投影
  2. 透视投影
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正交投影

  1. 将摄像机变换到原点,Y轴朝上,观测方向为-Z
  2. 去除Z坐标
  3. 将结果缩放到[-1, 1]中
正交投影矩阵*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

透视投影

waht
  1. 近大远小
  2. 齐次坐标中, ( x , y , z , 1 ) (x, y, z, 1) (x,y,z,1) ( k x , k y , k z , k ! = 0 ) (kx, ky, kz, k != 0) (kx,ky,kz,k!=0) ( x z , y z , z 2 , z ! = 0 ) (xz, yz, z^2, z != 0) (xz,yz,z2,z!=0)都代表了相同的点 ( x , y , z ) (x, y, z) (x,y,z)
    1. ( 1 , 0 , 0 , 1 ) (1, 0, 0, 1) (1,0,0,1) ( 2 , 0 , 0 , 2 ) (2, 0, 0, 2) (2,0,0,2)都是同一个点
how
  1. 先做透视投影到正交投影
    1. 将透视Frustum(锥台)挤压为长方体
  2. 然后再做透视投影
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
透视投影矩阵*

[ n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 1 0 ] \begin{bmatrix} n & 0 & 0 & 0 \\ 0 & n & 0 & 0 \\ 0 & 0 & n+f & -nf \\ 0 & 0 & 1 & 0 \\ \end{bmatrix} n0000n0000n+f100nf0

;