LearnOpenGL-变换总结

向量

  • 向量:有方向和长度
  • 向量基本运算:向量与标量运算、向量取反、向量加减
  • 向量长度:勾股定理
  • 单位向量:它的长度是1;向量的标准化
  • 向量相乘:
  • 点乘
  • v¯⋅k¯=||v¯||⋅||k¯||⋅cosθ
  • 当v¯v¯和k¯k¯都是单位向量,它们的长度会等于1。于是有v¯⋅k¯=1⋅1⋅cosθ=cosθ
  • 使用点乘可以很容易测试两个向量是否正交或平行
  • 计算方式:点乘是通过将对应分量逐个相乘,然后再把所得积相加来计算
  • 要计算两个单位向量间的夹角,我们可以使用反余弦函数cos−1
  • 点乘会在计算光照的时候非常有用
  • 叉乘
  • 叉乘只在3D空间中有定义,它需要两个不平行向量作为输入,生成一个正交于两个输入向量的第三个向量;如果输入的两个向量也是正交的,那么叉乘之后将会产生3个互相正交的向量
  • 记住公式就行

矩阵

  • 矩阵: 矩阵就是一个矩形的数字、符号或表达式数组
  • 矩阵中每一项叫做矩阵的元素
  • 矩阵可以通过(i, j)进行索引,i是行,j是列
  • 矩阵的加减
  • 矩阵的数乘
  • 矩阵相乘
  • 限制:只有当左侧矩阵的列数与右侧矩阵的行数相等,两个矩阵才能相乘;矩阵相乘不遵守交换律,也就是说A⋅B≠B⋅A
  • 结果矩阵的维度是(n, m),n等于左侧矩阵的行数,m等于右侧矩阵的列数

矩阵与向量相乘

  • 单位矩阵:单位矩阵是一个除了对角线以外都是0的N×N矩阵
  • 缩放:
  • 向量进行缩放就是对向量的长度进行缩放,而保持它的方向不变
  • 如果每个轴的缩放因子都一样那么就叫均匀缩放
  • 在3D空间中缩放w分量是无意义
  • 位移:
    位移是在原始向量的基础上加上另一个向量从而获得一个在不同位置的新向量的过程,从而在位移向量基础上移动了原始向量
  • 齐次坐标
  • 向量的w分量也叫齐次坐标
  • 想要从齐次向量得到3D向量,我们可以把x、y和z坐标分别除以w坐标。我们通常不会注意这个问题,因为w分量通常是1.0。使用齐次坐标有几点好处:它允许我们在3D向量上进行位移(如果没有w分量我们是不能位移向量的),而且下一章我们会用w值创建3D视觉效果。如果一个向量的齐次坐标是0,这个坐标就是方向向量,因为w坐标是0,这个向量就不能位移
  • 旋转
  • 在3D空间中旋转需要定义一个角一个旋转轴
  • 物体会沿着给定的旋转轴旋转特定角度
  • 万向节死锁(万向节死锁的真正解决方案是使用四元数)
  • 矩阵的组合
  • 使用矩阵进行变换的真正力量在于,根据矩阵之间的乘法,我们可以把多个变换组合到一个矩阵中
  • 建议您在组合矩阵时,先进行缩放操作,然后是旋转,最后才是位移,否则它们会(消极地)互相影响(因为矩阵乘法是不遵守交换律, 所以顺序很重要)