本系列文章系学习 唐福幸《Unity ShaderLab 新手宝典》的笔记
1.5使用矩阵进行变换
1.6.1 缩放矩阵
使向量v1沿着x,y,z轴分别缩放k1,k2,k3得到v2:(k1* x,k2* y,k3* z)
试着用矩阵来解决:
- 先把v1变成矩阵[x y z]
- 把v1在x轴上进行缩放k1倍
- 把v1在y轴上进行缩放k2倍
- 把v1在z轴上进行缩放k3倍
- 根据上一章的公式合并一下,变换后的矩阵就可以这么表示
1.6.2 旋转矩阵
- 二维
假设在平面坐标系中,逆时针旋转表示正方向, 原坐标是V=(1,0), 绕原点旋转B度得到V’如图所示
展开x`和y`得到
把x和y代入得到
由此可以得到二维旋转矩阵
因此, 二维变换只需要将需要变换的向量(x, y)和角度B代入上式, 就可以得到转换后的向量(x`, y`) - 三维
让我们想一想: 当空间坐标系绕某一个轴旋转的时候, 那个轴的坐标对应的坐标分量是不变的-
绕x轴旋转
如图所示,当绕x轴旋转的时候,从x轴正方向往负方向看,向量V从y向z轴方向旋转,得到以下式子:
化简式子得到
补充一下:
最终得到绕x轴的旋转矩阵
-
绕z轴旋转
同理可得:
-
绕y轴旋转
y轴有些不同: 当从y轴正方向往负方向看时, 正好z轴在x轴下方,得到结果如下
-
1.6.3 平移矩阵
假设向量V先向x方向移动d1, 再想y方向移动d2, 再向z方向移动d3, 那么得到下列式子:
V` = V +(d1, d2, d3) = (x + d1, y + d2, z + d3)
由于3x3矩阵无法实现平移变换, 需要添加一维, 变成4x4齐次矩阵, 如下:
顶点和向量还有一个区别: 顶点有位置属性, 而向量没有
- 顶点的最后一个分量补1, 如下
- 向量的最后一个分量补0(因为向量不管如何平移,自身是不变的), 如下