【UnityShader】数学基础

总结

  1. 对于观察空间(以摄像机为原点的坐标系),Unity使用的是右手坐标系。对于模型空间和世界空间,Unity使用的是左手坐标系。
  2. 矢量是指n维空间中一种包含模和方向的有向线段。
  3. 在Unity中,常规做法是把矢量放在矩阵的右侧,即把矢量转换成列矩阵来进行计算。
    CBAv = (C(B(Av)) 等价于v A T A^T AT B T B^T BT C T C^T CT = ((v A T A^T AT B T B^T BT) C T C^T CT)
    使用列向量的结果是,阅读顺序是从右到左的,即先对 v 使用A进行变换,再使用B进行变换,最后使用C进行变换。
  4. 大多数情况下,复合变换约定的顺序是先缩放、在旋转,最后平移。
  5. 绕x轴、y轴、z轴旋转的变换矩阵,在Unity中,这个选择顺序是 zxy。

矢量运算

  1. 矢量和标量的乘法/除法
    kv = (kvx, kvy, kvz)
    v/k = (vx/k, vy/k, vz/k) (k != 0)

  2. 矢量的加法和减法
    a + b = (ax + bx,ay + by, az + bz)
    a - b = (ax - bx, ay - by, az - bz)

  3. 矢量的模
    |v| = v x ∗ v x + v y ∗ v y + v z ∗ v z \sqrt{vx*vx + vy*vy + vz*vz} vxvx+vyvy+vzvz

  4. 单位矢量
    模为 1 的矢量

  5. 向量的点积(结果为标量)
    a ⋅ b a \cdot b ab = (ax, ay, az) * (bx, by, bz) = ax*bx + ay*by + az*bz
    a ⋅ b a \cdot b ab = |a| * |b| * cosα
    a ⋅ b a \cdot b ab = b ⋅ a b \cdot a ba
    a ⋅ ( b + c ) a \cdot (b + c) a(b+c) = a ⋅ b a \cdot b ab + b ⋅ c b \cdot c bc
    意义:
      b 在 a 方向上的投影值

  6. 向量的叉积(结果为矢量)
    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)
      b x a = (bx, by, bz) x (ax, ay, az) = (by*az - bz*ay, bz*ax - bx*az, bx*ay - by*ax) = - (a x b)
    不满足结合律
      (a x b) x c != a x (b x c)
    意义
      对两个矢量进行叉积的结果会得到一个同时垂直于两个矢量的新矢量;

  7. 应用
    计算垂直于一个平面、三角形的矢量;判断三角面片的朝向;

矩阵(matrix)运算

矩阵与矩阵的乘法
  • 一个 r X n 的矩阵 A 和一个 n X c 的矩阵 B 相乘,结果 C=AB 为 r X c 大小的矩阵;
  • C 的每一个元算 Cij = A 的第 i 行和 B 的第 j 列所有对应的矢量进行矢量点乘的结果;
  • 矩阵的乘法不满足交换律
      AB != BA
  • 矩阵的乘法满足结合律
      (AB)C = A(BC)
特殊的矩阵
方块矩阵(方阵)
  • 指的是行与列数目相等的矩阵;
单位矩阵
  • 对角元素全部为 1;
  • IM = M = MI
转置矩阵
  • 把矩阵的第 i 行变成第 i 列,而第 j 列变成第 j 行;
  • 矩阵转置的转置等于原矩阵
    (MT)T = M
  • 矩阵串接的转置,等于反向串接各个矩阵的转置
    ( A B ) T (AB)^T ABT = B T A T B^T A^T BTAT
逆矩阵
  • 必须是一个方阵;
  • 矩阵与矩阵的逆矩阵相乘为单位矩阵
      MM-1 = M-1M = I
  • 逆矩阵的逆矩阵是原矩阵本身
      (M-1)-1 = M
  • 单位矩阵的逆矩阵是它本身
      I = I-1
  • 转置矩阵的逆矩阵是逆矩阵的转置
      (MT)-1 = (M-1)T
  • 矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵
      (ABCD)-1 = D-1 C-1 B-1 A-1
正交矩阵
  • 如果一个方阵 M 和他的转置矩阵的乘积是单位矩阵的话,这个矩阵就是正交的;
      MMT = MTM = I
  • 如果一个矩阵是正交的,那么它的转置矩阵和逆矩阵是一样的;
      MT = M-1
  • 快速判断正交矩阵
    1)矩阵的每一行都是单位矢量;
    2)矩阵的每一行与另外的每一行相互垂直;
矩阵变换
  • 使用 3x3 矩阵就可以表示旋转和缩放等线性变换;
  • 不可以使用 3x3 矩阵来表示一个平移变换,扩展到 4x4 的矩阵就可以了;
  • 齐次坐标空间,即四维空间;
齐次坐标

  一般指的是四维矢量

基础变换矩阵

  纯平移、纯旋转和纯缩放的变换矩阵叫做基础变换矩阵
[ M 3 x 3 t 3 x 1 0 1 ] \left[ \begin{matrix} M3x3 & t3x1 \\ 0 & 1 \\ \end{matrix} \right] [M3x30t3x11]
解释:
  M3x3 用于表示旋转和缩放
  t3x1 用于表示平移
  01x3 是零矩阵

平移矩阵

缩放矩阵

旋转矩阵(是正交矩阵)

绕X轴旋转

绕Y轴旋转

绕Z轴旋转

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值