[计算机图形学03]仿射变换和透视变换

前文中提到的模型变换(Model transform)和观察变换(View transform)是由缩放变换(Sacle transform),旋转变换(Rotation transform)和平移变换(Translation transform)这三种变换组合而成。其中缩放变换和旋转变换被称为线性变换(Linear transform),线性变换和平移变换统称为仿射变换(Affine transform)。

1.缩放变换,可以用一个3x3的矩阵描述

$$ M_{s} = \left[\begin{matrix} Scale_x & 0 & 0 \\ 0 & Scale_y & 0 \\ 0 & 0 & Scale_z \\ \end{matrix} \right] $$

Unity3D中使用列向量来描述顶点信息,所以可以把顶点坐标右乘缩放矩阵完成缩放操作。

$$ \left[\begin{matrix} Scale_x & 0 & 0 \\ 0 & Scale_y & 0 \\ 0 & 0 & Scale_z \\ \end{matrix} \right] \left[\begin{matrix} x\\ y\\ z\\ \end{matrix} \right] = \left[\begin{matrix} Scale_x x \\ Scale_y y \\ Scale_z z\\ \end{matrix} \right] $$

2.旋转变换,可以用一个3x3的矩阵描述

$$ M_{rx} = \left[\begin{matrix} 1 & 0 & 0 \\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \\ \end{matrix} \right] M_{ry} = \left[\begin{matrix} cos\theta & 0 & -sin\theta \\ 0 & 1 & 0 \\ 0 & sin\theta & cos\theta \\ \end{matrix} \right] M_{rz} = \left[\begin{matrix} cos\theta & -sin\theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \\ \end{matrix} \right] $$

3.平移变换,与缩放变换和旋转变换不同平移变换是一个加法操作。事实上,用右乘一个3x3矩阵的方法是无法实现平移操作的,因为平移操作不是一个线性操作,所以我们需要用到齐次坐标,把三维向量扩展成一个四维向量。

$$ M_{t} = \left[\begin{matrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \\ \end{matrix} \right] $$

$$ \left[\begin{matrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \\ \end{matrix} \right] \left[\begin{matrix} x\\ y\\ z\\ w\\ \end{matrix} \right] = \left[\begin{matrix} x + t_x \\ y + t_y\\ z + t_z\\ w \end{matrix} \right] $$

4.仿射变换和投影变换的区别
[计算机图形学03]仿射变换和透视变换_第1张图片

你可能感兴趣的:(图形学)