从零一起读_UnityShaderLab_05_矩阵变换(中)

228 阅读1分钟

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

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

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

1.1旋转矩阵

1.1.1平面坐标系中的旋转矩阵

咱们先从2D旋转矩阵开始入手, 假设平面坐标系的两个坐标向量分别是 p = (1, 0), q = (0, 1)

img

将平面坐标逆时针旋转, 通过三角函数可以轻松的计算出旋转后的基向量分别是p^'^ = (cosθ, sinθ), q^'^ = (-sinθ, conθ).

将这两个基向量构成矩阵,于是实现旋转角度θ的矩阵R(θ):

R(θ)=[pq]=[cosθsinθsinθconsθ]R(θ) =\begin{bmatrix} p'\\q' \end{bmatrix} = \begin{bmatrix} cosθ& -sinθ\\sinθ& consθ \end{bmatrix}

1.1.2 空间坐标系统绕 x 轴旋转矩阵

围绕某个轴,旋转的时候,被围绕旋转的轴所对应的 坐标分量肯定不会改变,所以利用这一点就可以将空间坐标投射到平面中:

img img

按照平面坐标系的计算方式,通过三角函数分别计算出 旋转之后的两个基向量分别为: y^'^ = (0, cosθ, sinθ), z^'^ = (0, -sinθ, cosθ)由于 x 轴旋转之后的基向量不变,因此基向量 x^'^ = x = (1, 0, 0),若将这三个基向量构成矩阵, 最终绕 x 轴旋转角度 θ 的变换矩阵为:

[1000consθsinθ0sinθcosθ]\begin {bmatrix} 1 & 0 & 0\\ 0 & consθ & -sinθ \\ 0 & sinθ & cosθ \end{bmatrix}

那么同理围绕 y 轴的旋转的变换矩阵为:

[cosθ0sinθ010sinθ0cosθ]\begin {bmatrix} cosθ & 0 & -sinθ\\ 0 & 1 & 0 \\ sinθ & 0 & cosθ \end{bmatrix}

那么同理围绕 z 轴的旋转变换矩阵为:

[cosθsinθ0sinθcosθ0001]\begin {bmatrix} cosθ & sinθ & 0\\ -sinθ & cosθ & 0 \\ 0 & 0 & 1 \end{bmatrix}