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,即进行一次旋转时不一起旋转当前坐标系。