单位矩阵

主对角线上数据都是1,其余元素都是0,即为单元矩阵。
向量 X 单元矩阵 = 向量 X 1,不会发生任何变化。
向量与单元矩阵相乘的前提是:向量的列数 == 单元矩阵的行数

矩阵分类

行优先矩阵:

一行一行读取。

列优先矩阵:

一列一列读取

两者的关系

行优先矩阵经过转置 即可的到列优先矩阵

矩阵的点乘

矩阵可以进行点乘的前提:两个矩阵的行列数相等
矩阵A · 矩阵B = 矩阵C
-规则: 矩阵A的第一个元素与矩阵B的第一个元素的乘积 = 矩阵C的第一个元素

矩阵的叉乘

矩阵可以进行叉乘的前提:第一个矩阵的列数 = 第二个矩阵的行数
矩阵A X 矩阵B = 矩阵C
规则:矩阵A第一行与矩阵B第一列对应元素乘积的综合 = 矩阵C的第一个元素

OpenGL中的矩阵

OpenGL中单元矩阵有3中初始化方法

  • 通过GLFloat定义一个一维数组
  • 通过M3DMatrix44f创建一个单元矩阵
  • 通过方法m3dLoadIdentity44f 创建单元矩阵
void m3dLoadIdentity44f(M3DMatrix44f m);

OpenGL中,使用较多的矩阵都是一维数组创建的,且规定使用以列为主的矩阵排序。
OpenGL中的矩阵都是4x4的,每一列都是由4个元素组成的向量,如图所示

列向量进行了特殊的标注,表示这是以列为主的矩阵,主要体现为矩阵的最后一行都是0,只有最后一个元素为1

理解OpenGL中的矩阵相乘

数学角度

数学中为了方便计算,都是以行矩阵为标准,从左到右的顺序进行计算,所以在数学中,顶点将以行向量的方式表示
从数学角度理解mvp矩阵的计算,由于顶点是行向量,要满足矩阵相乘的规定条件(即 叉乘的前提),必须将mvp矩阵放在右边,属于右乘
顶点向量 = V_local * M_model * M_view * M_pro
顶点向量 = 顶点 * 模型矩阵 * 观察矩阵 * 投影矩阵

OpenGL角度

OpenGL中的矩阵规定是以列为主,所以顶点以列向量的方式表示
从OpenGL角度理解mvp矩阵的计算,由于顶点是列向量,如果项进行矩阵规则,就需要满足矩阵相乘的条件,需要将mvp矩阵的顺序颠倒为pvm,且放在列向量的左边,属于左乘

OpenGL矩阵堆栈中矩阵相乘源码分析

从OpenGL矩阵堆栈中矩阵相乘源码分析,主要有以下3步
-从栈顶获取栈顶矩阵,复制到mTemp
将栈顶矩阵 mTemp 左乘 mMatrix
将结果放回栈顶,覆盖栈顶矩阵

而我们在观察者不动、物体动的观察方式中,根据之前Demo代码可知

ChangeSize函数中,得到投影矩阵,将投影矩阵压入投影矩阵堆栈栈顶,并与模型视图矩阵栈顶相乘,将结果覆盖栈顶,即 投影矩阵 * 单元矩阵 = 投影矩阵。
RenderScene函数中,将栈顶矩阵copy一份,然后将观察者矩阵与模型视图矩阵堆栈栈顶相乘,其结果覆盖栈顶矩阵,即投影矩阵 * 视图矩阵 = 视图投影矩阵。
得到模型矩阵,将模型矩阵与栈顶矩阵相乘,其结果覆盖栈顶矩阵,即 栈顶 = 模型视图投影矩阵。

由此可知,在实际的代码中,mvp矩阵的计算顺序是pvm,最后再将mvp矩阵与顶点矩阵相乘,得到物体变换后的顶点和位置。

OpenGL之矩阵相乘相关推荐

  1. 并行计算——OpenMP加速矩阵相乘

    OpenMP是一套基于共享内存方式的多线程并发编程库.第一次接触它大概在半年前,也就是研究cuda编程的那段时间.OpenMP产生的线程运行于CPU上,这和cuda不同.由于GPU的cuda核心非常多 ...

  2. python数组对应元素相乘_python的几种矩阵相乘的公式详解

    1. 同线性代数中矩阵乘法的定义: np.dot() np.dot(A, B):对于二维矩阵,计算真正意义上的矩阵乘积,同线性代数中矩阵乘法的定义.对于一维矩阵,计算两者的内积.见如下Python代码 ...

  3. svd奇异值分解_矩阵相乘和奇异值分解(SVD)

    关于矩阵相乘 图1.Trefethen, Lloyd N., and David Bau III. Numerical linear algebra. Vol. 50. Siam, 1997.中关于矩 ...

  4. pytorch 矩阵相乘_深入浅出PyTorch(算子篇)

    Tensor 自从张量(Tensor)计算这个概念出现后,神经网络的算法就可以看作是一系列的张量计算.所谓的张量,它原本是个数学概念,表示各种向量或者数值之间的关系.PyTorch的张量(torch. ...

  5. 【神经网络与深度学习】【C/C++】比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能

    比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能 对于机器学习的很多问题来说,计算的瓶颈往往在于大规模以及频繁的矩阵运算,主要在于以下两方面: (Dense/Sparse) Matr ...

  6. 转圈显示的Java程序和两矩阵相乘

    1.转圈显示的Java程序,将N x N的方阵转圈赋值并显示输出.如图:N=8,8x8方阵转圈填数结果. 解析:这是一个依靠矩阵中每个元素的下标对其进行操作的典型事例.其要求将1~NXN之间的整数按照 ...

  7. 如何让excel表格排头一直都在_Excel表格技巧—如何计算矩阵相乘

    在Excel表格中有两个矩阵的情况下,如何计算出两个矩阵相乘的数值呢?下面就给大家分享计算矩阵相乘的方法. 首先,我们在表格当中输入两个矩阵,一个是2*3矩阵,还有一个是3*2矩阵,那么我们所得出的矩 ...

  8. 蓝桥杯-矩阵相乘(java)

    算法提高 矩阵相乘 时间限制:1.0s 内存限制:256.0MB问题描述小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容.当然,小明上课打瞌睡也没问题 ...

  9. 矩阵相乘入门,两个矩阵相乘

    •矩阵:矩阵可以看成一个n×m的数表,用二维数组表示 •矩阵乘法:定义矩阵A,B.A和B可以乘法操作当且仅当A的大小是a×b,B的大小是b×c,设矩阵C=AB,则C的大小是a×c,且有 最普通的矩阵乘 ...

最新文章

  1. 边缘计算架构_边缘计算架构梳理
  2. mysql 查询相同字段值的个数_好文 | MySQL 索引B+树原理,以及建索引的几大原则...
  3. Hadoop文件的基本操作
  4. 17:附近最大的城市
  5. SAP gateway 里对 OData eq ne lt gt 操作的实现源代码
  6. 长沙.NET技术社区·设计到实现
  7. php send helo/ehlo first错误,phpmailer发送邮件提示SMTP server error怎么回事?
  8. 【蓝桥杯单片机】超声波模块(测距原理,驱动方式)
  9. python logging模块详解_python logging模块使用总结
  10. Xml+Xsl:内容与形式的完美分离
  11. mysql 还原 批量ibd_MySQL只有.frm和.ibd文件如何批量恢复InnoDB表-爱可生
  12. oracle数据泵备份单表,使用数据泵备份/恢复某些表
  13. wifi万能钥匙自媒体平台开放注册(付注册流程)
  14. (转)使用CUnit进行单元测试和覆盖率统计
  15. 微信统一服务(小程序服务通知与微信公众号模板消息)发送
  16. LaTex论文排版 | (24) 插入超链接和目录
  17. php企业后台管理系统模板,DouPHP_admin 蓝色企业CMS后台管理模板 - 下载 - 搜珍网...
  18. 4位加法器四级流水线、4位加法器两级流水线以及32位加法器八级流水线设计
  19. 股票交易接口实现方式
  20. SGVision与三菱FX5UPLC通讯

热门文章

  1. 产品学习过程记录(六)——为淘宝设计拼购功能
  2. 如何判断自己适不适合考研?这9种人不适合考研
  3. 基于Unity3D三维模型的动作插值(空间关键帧动画实现)
  4. 复星获8家银行120亿元贷款;百事亚太区首个全球业务服务中心在成都开业 | 美通企业日报...
  5. BGCC源代码(一)
  6. 华为OD机试真题-货币单位换算【2023Q1】【JAVA、Python、C++】
  7. LaTeX的RGB颜色笔记
  8. 促销套路or营销探索?万和周年庆引发的创新思考
  9. Crash 变量解析
  10. go语言加速python_Python开发者在转到Go语言之前需了解什么? - 头条网 TouTiao.com 你关心的,才是头条!...