美文网首页
OpenGL-17-矩阵

OpenGL-17-矩阵

作者: 宇宙那么大丶 | 来源:发表于2020-08-05 18:40 被阅读0次

一、认识矩阵

  • 假设在空间有⼀个点,使⽤ xyz 描述它的位置。此时让其围绕任意位置旋转⼀定⻆度后,我们需要知道这个点的新的位置,此时需要通过矩阵进⾏计算。
  • 因为新的位置的x 不单纯与原来的x 还和旋转的参数有关,甚⾄于y和z坐标有关。
  • 矩阵只有⼀⾏或者⼀列都是合理的. 只有⼀⾏或者⼀列数字可以称为向量. 也可以称为矩阵。
  • OpenGL中的矩阵,是以列为主的排序。
    在其他编程标准中,许多矩阵库定义⼀个矩阵时,是使⽤⼆维数组。
    在OpenGL的约定⾥,可以使用一维数组和二维数组,但是更多倾向使⽤ ⼀维数组。这样做的原因是: OpenGL 使⽤的是 Column-Major(以列为主)矩阵排序的约定

向量: 请看上一篇文章向量
矩阵:我们来看下百度给的定义:

方阵:⾏数和列数相同的矩阵。例如2 * 2、3 * 3、4 * 4矩阵。

行矩阵、列矩阵:根据不同编程定义不同,是一个优先顺序

单元矩阵:对角线元素都为1,其他元素都为0的矩阵。也可以看做是1。

矩阵在OpenGL中的初始化方法:

//三维矩阵声明
typedef float M3DMatrix33f[9];

//四维矩阵的声明
typedef float M3DMatrix44f[16];

单元矩阵初始化的三种方法:

//单元矩阵初始化⽅式1
GLFloat m[] = {
  1,0,0,0, //X Column
  0,1,0,0, //Y Column
  0,0,1,0, //Z Column
  0,0,0,1 // Translation
}


// 单元矩阵初始化⽅式 2
M3DMatrix44f m = {
  1,0,0,0, //X Column
  0,1,0,0, //Y Column
  0,0,1,0, //Z Column
  0,0,0,1 // Translation
}


//单元矩阵初始化⽅式3
void m3dLoadIdentity44f(M3DMatrix44f m);

⼀个4*4矩阵是如何在3D空间中表示⼀个位置和⽅向的?

  • 如下图。列向量进⾏了特别的标注:矩阵的最后⼀⾏都为0,只有最后⼀个元素为1
  • 如果将⼀个对象所有的顶点向量 乘以这个矩阵,就能让整个对象变换到空间中给定的位置和⽅向


    图片.png

二、矩阵的使用

1、矩阵转置

沿着对角线翻折,使 行矩阵变列矩阵 或者 列矩阵变行矩阵。

2、标量 x 矩阵

3、向量 x 矩阵

  • 向量也可以看做是一个1 * n矩阵,或者n * 1矩阵。同样要满足 前矩阵的列 = 后矩阵的行 才可以相乘。否则没有意义。
  • 比如:1 * 3代表向量 和 3 * 3代表矩阵。向量 * 矩阵 是可以的。矩阵 * 向量是没有意义的。


如此,我们可以得出:

  • ⾏向量左乘矩阵时,结果是⾏向量;
  • 列向量右乘矩阵时,结果是列向量;
  • ⾏向量右乘矩阵时,结果是⽆意义;
  • 列向量左乘矩阵时,结果是⽆意义;
  • 结果向量中的每个元素都是原向量与矩阵中单独⾏或列的点积;
  • 矩阵和向量乘法满⾜对向量加法的分配律,对于向量v、w 和 矩阵M ,
    (v + w)M = vM + wM;

4、矩阵 x 矩阵

  • 前矩阵的列 = 后矩阵的行 才可以相乘
  • 1.在满足相乘法则的情况下,[任意矩阵M]乘以[⽅阵S],不管从哪边乘,都得到与原矩阵⼤⼩相同的矩阵。当然,前提是假定乘法有意义。如果S是单位 矩阵,结果就是原矩阵M,即:MI = IM = M 。 ·
  • 2.矩阵乘法不满⾜交换律,即:AB != BA
  • 3.矩阵乘法满⾜结合律,即:(AB)C = A(BC)。假定ABC的维数使得其乘法有意义,要注意如果(AB)C有意义,那么A(BC)就 ⼀定有意义。
  • 4.矩阵乘法也满⾜与标量或向量的结合律,即:(kA)B = k(AB) = A(kB); (vA)B = v(AB);
  • 5.矩阵积的转置相当于先转置矩阵然后以相反的顺序乘法,即:(AB)T = BT AT

5、OpenGL中的矩阵左乘

线性代数中,矩阵相乘坐标计算是 从左向右的顺序(右乘),如下:
变换后顶点向量 = V_local * M_model * M_view * M_pro (MVP)
变换后顶点向量 = 顶点 x 模型矩阵 x 观察矩阵 x 投影矩阵

图片.png

但是,在OpenGL中是相反的顺序(左乘),如下:
变换顶点向量 = M_pro * M_view * M_model * V_local (PVM)
变换顶点向量 = 投影矩阵 x 视图变换矩阵 x 模型矩阵 x 顶点

图片.png 图片.png
    1. 从栈顶获取栈顶矩阵 复制到 mTemp这个临时变量中
    1. 将栈顶矩阵 mTemp 左乘 mMatrix
    1. 将结果放回栈顶空间⾥

我们代码段中矩阵的先手顺序:


图片.png

相关文章

  • OpenGL-17-矩阵

    一、认识矩阵 假设在空间有⼀个点,使⽤ xyz 描述它的位置。此时让其围绕任意位置旋转⼀定⻆度后,我们需要知道这个...

  • 逆矩阵

    逆矩阵对任意矩阵,如果存在一个矩阵,使,则称矩阵可逆,矩阵为矩阵的逆矩阵。 奇异矩阵并不是所有的矩阵都有逆矩阵,没...

  • 1、矩阵的概念及运算

    一、什么是矩阵 矩阵的概念 特殊矩阵 零矩阵 行矩阵 列矩阵 方阵 对角阵(对角阵、纯量矩阵、单位矩阵 ) 三角...

  • 矩阵代数(四)- 分块矩阵

    小结 分块矩阵 分块矩阵运算 分块矩阵的逆 分块矩阵 矩阵,也可写成分块矩阵的形状,它的元素是分块(子矩阵) 加法...

  • 基础矩阵、本质矩阵,单应矩阵及其解法

    本质矩阵,基础矩阵,单应矩阵,自由度及其解法基本矩阵、本质矩阵和单应矩阵基本矩阵的基本解法之8点算法单应矩阵与基础...

  • 矩阵

    1. 线性方程组 2. 矩阵定义 3. 矩阵运算 矩阵的加法矩阵的加法 数与矩阵相乘数与矩阵相乘 矩阵与矩阵相乘矩...

  • ML特训营笔记2

    线性代数 矩阵 1.矩阵的加法 设是两个矩阵,则 矩阵称为矩阵A 2.矩阵的数乘 设是矩阵,是一个常数,则矩阵称为...

  • 2018-10-16 矩阵学习

    矩阵:矩阵块 矩阵的等价转化: 行阶梯形矩阵、行最简形矩阵、标准型矩阵: 初等矩阵: 超重要的推理:image.p...

  • 【生物信息】感知矩阵与概率矩阵判定功能位点

    SenseMatrix 用核苷酸感知矩阵(加权矩阵)与概率矩阵判定功能位点 感知矩阵 感知矩阵(或加权矩阵)通过训...

  • Numpy介绍4

    Numpy矩阵算数介绍3 矩阵的元素算数 矩阵变形 矩阵拼接 矩阵切分 .hsplit(a,3) vsplit(...

网友评论

      本文标题:OpenGL-17-矩阵

      本文链接:https://www.haomeiwen.com/subject/ptdtrktx.html