OpenGL之矩阵相乘
单位矩阵
主对角线上数据都是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之矩阵相乘相关推荐
- 并行计算——OpenMP加速矩阵相乘
OpenMP是一套基于共享内存方式的多线程并发编程库.第一次接触它大概在半年前,也就是研究cuda编程的那段时间.OpenMP产生的线程运行于CPU上,这和cuda不同.由于GPU的cuda核心非常多 ...
- python数组对应元素相乘_python的几种矩阵相乘的公式详解
1. 同线性代数中矩阵乘法的定义: np.dot() np.dot(A, B):对于二维矩阵,计算真正意义上的矩阵乘积,同线性代数中矩阵乘法的定义.对于一维矩阵,计算两者的内积.见如下Python代码 ...
- svd奇异值分解_矩阵相乘和奇异值分解(SVD)
关于矩阵相乘 图1.Trefethen, Lloyd N., and David Bau III. Numerical linear algebra. Vol. 50. Siam, 1997.中关于矩 ...
- pytorch 矩阵相乘_深入浅出PyTorch(算子篇)
Tensor 自从张量(Tensor)计算这个概念出现后,神经网络的算法就可以看作是一系列的张量计算.所谓的张量,它原本是个数学概念,表示各种向量或者数值之间的关系.PyTorch的张量(torch. ...
- 【神经网络与深度学习】【C/C++】比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能
比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能 对于机器学习的很多问题来说,计算的瓶颈往往在于大规模以及频繁的矩阵运算,主要在于以下两方面: (Dense/Sparse) Matr ...
- 转圈显示的Java程序和两矩阵相乘
1.转圈显示的Java程序,将N x N的方阵转圈赋值并显示输出.如图:N=8,8x8方阵转圈填数结果. 解析:这是一个依靠矩阵中每个元素的下标对其进行操作的典型事例.其要求将1~NXN之间的整数按照 ...
- 如何让excel表格排头一直都在_Excel表格技巧—如何计算矩阵相乘
在Excel表格中有两个矩阵的情况下,如何计算出两个矩阵相乘的数值呢?下面就给大家分享计算矩阵相乘的方法. 首先,我们在表格当中输入两个矩阵,一个是2*3矩阵,还有一个是3*2矩阵,那么我们所得出的矩 ...
- 蓝桥杯-矩阵相乘(java)
算法提高 矩阵相乘 时间限制:1.0s 内存限制:256.0MB问题描述小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容.当然,小明上课打瞌睡也没问题 ...
- 矩阵相乘入门,两个矩阵相乘
•矩阵:矩阵可以看成一个n×m的数表,用二维数组表示 •矩阵乘法:定义矩阵A,B.A和B可以乘法操作当且仅当A的大小是a×b,B的大小是b×c,设矩阵C=AB,则C的大小是a×c,且有 最普通的矩阵乘 ...
最新文章
- 边缘计算架构_边缘计算架构梳理
- mysql 查询相同字段值的个数_好文 | MySQL 索引B+树原理,以及建索引的几大原则...
- Hadoop文件的基本操作
- 17:附近最大的城市
- SAP gateway 里对 OData eq ne lt gt 操作的实现源代码
- 长沙.NET技术社区·设计到实现
- php send helo/ehlo first错误,phpmailer发送邮件提示SMTP server error怎么回事?
- 【蓝桥杯单片机】超声波模块(测距原理,驱动方式)
- python logging模块详解_python logging模块使用总结
- Xml+Xsl:内容与形式的完美分离
- mysql 还原 批量ibd_MySQL只有.frm和.ibd文件如何批量恢复InnoDB表-爱可生
- oracle数据泵备份单表,使用数据泵备份/恢复某些表
- wifi万能钥匙自媒体平台开放注册(付注册流程)
- (转)使用CUnit进行单元测试和覆盖率统计
- 微信统一服务(小程序服务通知与微信公众号模板消息)发送
- LaTex论文排版 | (24) 插入超链接和目录
- php企业后台管理系统模板,DouPHP_admin 蓝色企业CMS后台管理模板 - 下载 - 搜珍网...
- 4位加法器四级流水线、4位加法器两级流水线以及32位加法器八级流水线设计
- 股票交易接口实现方式
- SGVision与三菱FX5UPLC通讯
热门文章
- 产品学习过程记录(六)——为淘宝设计拼购功能
- 如何判断自己适不适合考研?这9种人不适合考研
- 基于Unity3D三维模型的动作插值(空间关键帧动画实现)
- 复星获8家银行120亿元贷款;百事亚太区首个全球业务服务中心在成都开业 | 美通企业日报...
- BGCC源代码(一)
- 华为OD机试真题-货币单位换算【2023Q1】【JAVA、Python、C++】
- LaTeX的RGB颜色笔记
- 促销套路or营销探索?万和周年庆引发的创新思考
- Crash 变量解析
- go语言加速python_Python开发者在转到Go语言之前需了解什么? - 头条网 TouTiao.com 你关心的,才是头条!...