OpenGL-图形图像开发中的3D数学

361 阅读3分钟

坐标系

左手坐标系和右手坐标系

  • 世界坐标系:经纬坐标 原点在本初子午线与赤道的交点

  • 物体坐标系 和物体的位置的所处的方向相关联,有时也被称作模型坐标系(模型顶点的坐标都是在模型坐标系中描述的)

  • 摄像机坐标系:和观察者相关联 摄像机在原点,x轴向右,z轴向前,y轴向上

  • 惯性坐标系:为简化世界坐标系到物体坐标系的转换,引入的坐标系

向量的运算和几何意义 向量的点乘和叉乘

参照 juejin.cn/post/685041…

矩阵的数学意义

方阵:行数和列数相同的矩阵 单位矩阵:是一种特殊的对角矩阵,n维单位矩阵记做 In。是n * n 矩阵。对象元素为1.其他元素为0。

矩阵转置

一个r * c 矩阵M。M的转置记做M^T,是一个 c * r 矩阵。它的列由M的行组成。可以从另⽅面理解。 (Mij)^T = Mji ,即沿着矩阵的对角线翻折。 向量的转置:

标量与矩阵的乘法计算

矩阵相乘

A ✖ B 计算的前提条件是: A的列数 = B的行数

矩阵相乘法则:对结果中的任意元素Cij,取A的第i行和第j列,将行和列中的对应元素相乘。然后将结果相加 (等于A的i列列和B的j列列的点积),Cij就等于这个和。

注意:

  • 单位矩阵左乘/右乘矩阵,都等于原矩阵
  • 不满足交换律 AB != BA
  • 满足结合律(前提是矩阵相乘有意义) ABC= A(BC)
  • (kA)B = k(AB) = A(kB)
  • (AB)^T = (B^T)(A^T)

向量与矩阵乘法

⾏向量左乘矩阵时,结果是⾏向量; 列向量右乘矩阵时,结果是列向量; 行向量右乘矩阵时,结果是无意义; 列向量左乘矩阵时,结果是无意义;

矩阵与向量相乘 注意事项: 1.结果向量中的每个元素都是原向量与矩阵中单独行或列的点积; 2.矩阵一向量乘法满足对向量加法的分配律,对于向量v,w 和 矩阵M 有, (v + w)M = vM + wM;

为什么要使用行向量?(偏向于书写⽅便)

  • 1.在文字中使用行向量的形式更更加好书写;
  • 2.用矩阵乘法实现坐标系转换时,向量左乘矩阵的形式更加方便
  • 3.DirectX使用的是行向量

为什么要使用列向量?

  • 1.等式中使⽤列向量形式更好
  • 2.多本计算机图形学都是使用的列向量
  • 3.OpenGL 使⽤的是列向量

矩阵的几何意义:

  • 1.⽅阵的行能被解释为坐标系的基向量;
  • 2.为了将向量从原坐标系变换到新坐标系,⽤它乘以一个矩阵。
  • 3.从原坐标系到这些基向量定义的新坐标系的变化是一种线性变换。线性变换保持直线和平行线。但角度、⻓度 面积或体积可能会改变。
  • 4.零向量乘以任何矩阵仍然得到零向量。因此,⽅阵所代表的线性变换的原点和原坐标系原⼀一致。变换不包含原点。
  • 5.可以通过想象变换后的坐标系的基向量来想象矩阵。这些基向量在2D中构成L形。在3D构成“三⻆架”型。⽤一个盒⼦以及辅助更更有助于理解

2D下的旋转矩阵公式推演

3D下的旋转矩阵公式推演

  • 围绕X轴旋转

  • 围绕Y轴旋转

  • 围绕Z轴旋转

  • 围绕n轴旋转

缩放与平移矩阵公式推演

  • 沿坐标轴2D的缩放矩阵

  • 沿坐标轴3D的缩放矩阵

  • 沿任意方向缩放