从零一起读_UnityShaderLab_04_矩阵变换(上)

159 阅读1分钟

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈

如果我能更新完这一系列,我希望掘金能给我颁发一个劳模奖.

1.1 矩阵变换向量的原理

之前所提到的向量的加法,可以把向量理解为沿着每个轴进行一系列的平移, 向量(1, 2, 3)可以理解为 先平移(1, 0, 0), 再平移(0, 2, 0),再平移(0, 0, 3),这一系列平移可以表示成向量的加法运算,可以通过列向量的形式表示:

[123]=[100]+[020]+[003]\begin{bmatrix} 1\\2\\3 \end{bmatrix} = \begin{bmatrix} 1\\0\\0 \end{bmatrix}+ \begin{bmatrix} 0\\2\\0 \end{bmatrix} + \begin{bmatrix} 0\\0\\3 \end{bmatrix}

那么所有的向量都可以这么写:

V=[xyz]=[x00]+[0y0]+[00z]V = \begin{bmatrix} x\\y\\z \end{bmatrix} = \begin{bmatrix} x\\0\\0 \end{bmatrix}+ \begin{bmatrix} 0\\y\\0 \end{bmatrix} + \begin{bmatrix} 0\\0\\z \end{bmatrix}

然后将每个向量写成数值与单位向量相乘的形式:

V=[xyz]=x[100]+y[010]+z[001]V = \begin{bmatrix} x\\y\\z \end{bmatrix} = x\begin{bmatrix} 1\\0\\0 \end{bmatrix} + y\begin{bmatrix} 0\\1\\0 \end{bmatrix}+z\begin{bmatrix} 0\\0\\1 \end{bmatrix}

观察以上向量可知,每个单位向量其实表示的就是 x y z 轴的正方向,如果把三个轴的正方向用 p q r 表示,那么就可以的到以下公式

V=xp+yq+zrV = xp+yq+zr

现在将p q r 三个基向量打包成一个基向量的集合, 以 3 X 3的矩阵进行表示:

[pqr]=[pxpypzqxqyqzrxryrz]\begin{bmatrix} p\\q\\r \end{bmatrix} = \begin{bmatrix} p_x&p_y&p_z\\q_x&q_y&q_z\\r_x&r_y&r_z\\ \end{bmatrix}

将任意向量 (x, y, z) 左乘上述矩阵:

[xyz][pxqypzqxqyqzpxqyrz]=[xpx+yqx+zrxxpy+yqy+zryxpz+yqz+zrz]\begin{bmatrix} x&y&z \end{bmatrix}\begin{bmatrix} p_x&q_y&p_z\\q_x&q_y&q_z\\p_x&q_y&r_z\\ \end{bmatrix} = \begin{bmatrix} x p_x + y q_x + z r_x & x p_y + y q_y + z r_y& x p_z + y q_z + z r_z \end{bmatrix}