Shader基础数学
仅用作个人的常用提示,不会有全部详细介绍,资料来自《Unity Shader入门精要》
笛卡尔坐标系
笛卡尔坐标系
构成
原点
N条过原点,相互垂直的坐标轴,主要看是几维
OpenGL和DirectX使用的笛卡尔坐标系不同
坐标轴又称作,基矢量
长度为1,的基矢量 — 标准正交基
四维空间 — 齐次坐标系
左/右手坐标系
三维的笛卡尔坐标系并不都是等价的,如果有相同旋向性,就可以通过旋转方法来让两个坐标系重合,但是如果旋向性不同,就不能重合。
在Unity中
- 模型空间和世界空间使用了左手坐标系
- 观察空间使用了右手坐标系
点和矢量
点 – 空间中的一个位置
矢量/向量 – 包含模和方向的有向线段, 通常用来表示相对于某个点的偏移,只要模和方向不变,放哪儿都一样
矢量运算
点积 — 结果是标量
a · b = (ax,ay,az) · (bx,by,bz) = axbx + ayby + azbz
a · b = |a||b|cosθ
性质
a · b = b · a
ka · b = a · kb
a · (b + c) = a · b + a · c
a · a = |a|^2
几何意义 — 投影
叉积 — 结果是矢量
a X b = (ax,ay,az) X (bx,by,bz) = (aybz - azby, azbx - axbz, axby - aybx)
a X b = |a||b|sinθ
性质
- a X b != b X a
- a X b = - (b X a)
a X b 方向的确认,先判断是左手还是右手坐标系,接着
矩阵
基础
对角元素 – 行号和列号相同的元素
转置矩阵 – r X c 变成 c X r
行列式不为0,既是可逆
正交矩阵 – 矩阵和它转置矩阵的乘积是单位矩阵
- 矩阵的每一行,即c1、c2 和c3 是单位矢量,因为只有这样它们与自己的点积才能是1;
- 矩阵的每一行,即c1、c2 和c3 之间互相垂直,因为只有这样它们之间的点积才能是0。
- 上述两条结论对矩阵的每一列同样适用,因为如果M是正交矩阵的话,MT 也会是正交矩阵。
变换
线性 – 缩放,旋转,错切,镜像,正交投影
三维到四维的变化
点 — 添加 1
矢量 — 添加 0
基础变换矩阵分解
一个基础变换矩阵可以分解成4部分
左上角矩阵M用于表示旋转和缩放,t用来表示平移,0表示零矩阵,右下角元素就是标量1
Unity中旋转顺序是ZXY
绕坐标系E 下的z 轴旋转z,绕坐标系E 下的y 轴旋转y,绕坐标系E 下的x 轴旋转x,即进行一次旋转时不一起旋转当前坐标系。