要点速览
-
缩放(Scale): [ x ′ y ′ ] = [ s x 0 0 s y ] [ x y ] \begin{bmatrix} {x}'\\ {y}' \end{bmatrix} = \begin{bmatrix} s_x & 0\\ 0 & s_y \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix} [x′y′]=[sx00sy][xy]
-
反射(Reflection): [ x ′ y ′ ] = [ − 1 0 0 1 ] [ x y ] ( 关 于 y 轴 ) [ x ′ y ′ ] = [ 1 0 0 − 1 ] [ x y ] ( 关 于 x 轴 ) \begin{bmatrix} {x}'\\ {y}' \end{bmatrix} = \begin{bmatrix} -1 & 0\\ 0 & 1 \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}\quad(关于y轴) \quad\quad \begin{bmatrix} {x}'\\ {y}' \end{bmatrix} = \begin{bmatrix} 1 & 0\\ 0 & -1 \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}\quad(关于x轴) [x′y′]=[−1001][xy](关于y轴)[x′y′]=[100−1][xy](关于x轴)
-
切变(Shear): [ x ′ y ′ ] = [ 1 a 0 1 ] [ x y ] ( x 方 向 上 的 切 变 ) [ x ′ y ′ ] = [ 1 0 a 1 ] [ x y ] ( y 方 向 上 的 切 变 ) \begin{bmatrix} {x}'\\ {y}' \end{bmatrix} = \begin{bmatrix} 1 & a\\ 0 & 1 \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}\quad(x方向上的切变) \quad\quad \begin{bmatrix} {x}'\\ {y}' \end{bmatrix} = \begin{bmatrix} 1 & 0\\ a & 1 \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}\quad(y方向上的切变) [x′y′]=[10a1][xy](x方向上的切变)[x′y′]=[1a01][xy](y方向上的切变)
-
旋转(Rotate): R θ = [ cos θ − sin θ sin θ cos θ ] \mathbf{R}_{\theta}= \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} Rθ=[cosθsinθ−sinθcosθ]
-
平移(Translation): ( x ′ y ′ w ′ ) = ( 1 0 t x 0 1 t y 0 0 1 ) ⋅ ( x y 1 ) \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} ⎝⎛x′y′w′⎠⎞=⎝⎛100010txty1⎠⎞⋅⎝⎛xy1⎠⎞
-
齐次坐标:2D 点: ( x , y , 1 ) T (x,y,1)^{T} (x,y,1)T,2D 向量: ( x , y , 0 ) T (x,y,0)^{T} (x,y,0)T 。 w ≠ 0 w \neq 0 w=0 时每一项都除以 w w w,就是 2D 点。
-
仿射变换(Affine Transformation)= (先)线性变换 + (再)平移: ( x ′ y ′ 1 ) = ( a b t x c d t y 0 0 1 ) ⋅ ( x y 1 ) \begin{pmatrix} {x}'\\ {y}'\\ 1 \end{pmatrix} = \begin{pmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} x\\ y\\ 1 \end{pmatrix} ⎝⎛x′y′1⎠⎞=⎝⎛ac0bd0txty1⎠⎞⋅⎝⎛xy1⎠⎞
-
变换的顺序不能调换,从右往左写(左乘)。
-
视图变换(View / Camera transformation):Camera is at the origin, up at Y Y Y, look at − Z -Z −Z,让物体跟着相机走。
- 相机的位置 e ⃗ \vec{e} e,观察方向 g ^ \hat{g} g^,向上方向 t ^ \hat{t} t^ (假定垂直于观察方向)
- M v i e w = R v i e w T v i e w = [ x g ^ × t ^ y g ^ × t ^ z g ^ × t ^ 0 x t y t z t 0 x − g y − g z − g 0 0 0 0 1 ] [ 1 0 0 − x e 0 1 0 − y e 0 0 1 − z e 0 0 0 1 ] M_{view}=R_{view}T_{view} =\begin{bmatrix} x_{\hat{g} \times \hat{t}} & y_{\hat{g} \times \hat{t}} & z_{\hat{g} \times \hat{t}} & 0 \\ x_{t} & y_{t} & z_{t} & 0 \\ x_{-g} & y_{-g} & z_{-g} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & -x_{e} \\ 0 & 1 & 0 & -y_{e} \\ 0 & 0 & 1 & -z_{e} \\ 0 & 0 & 0 & 1 \end{bmatrix} Mview=RviewTview=⎣⎢⎢⎡xg^×t^xtx−g0yg^×t^yty−g0zg^×t^ztz−g00001⎦⎥⎥⎤⎣⎢⎢⎡100001000010−xe−ye−ze1⎦⎥⎥⎤
-
正交投影(Orthographic projection):长方体 [ l , r ] × [ b , t ] × [ f , n ] \left [ l,r \right ]\times \left [ b,t \right ]\times \left [ f,n \right ] [l,r]×[b,t]×[f,n] map(映射) 到 标准视体 [ − 1 , 1 ] 3 \left [ -1,1 \right ]^{3} [−1,1]3 (注意: n > f n > f n>f),先平移再缩放
- M o r t h o = [ 2 r − l 0 0 0 0 2 t − b 0 0 0 0 2 n − f 0 0 0 0 1 ] [ 1 0 0 − r + l 2 0 1 0 − t + b 2 0 0 1 − n + f 2 0 0 0 1 ] = [ 2 r − l 0 0 l + r l − r 0 2 t − b 0 b + t b − t 0 0 2 n − f f + n f − n 0 0 0 1 ] 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}= \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & \frac{l + r}{l -r}\\ 0 & \frac{2}{t-b} & 0 & \frac{b + t}{b -t}\\ 0 & 0 & \frac{2}{n-f} & \frac{f + n}{f-n}\\ 0 & 0 & 0 & 1 \end{bmatrix} Mortho