OpenGL有个小小的难点,就是矩阵变换的顺序问题。一不小心就会用错,变换后的物体和自己想要的完全不一样。为了自己的理解,也为了帮助别人的理解,我下面对矩阵变换做一个解释。当然,大片大片的文字肯定会让大家看的云里雾里,所以我特意画了一些示意图供大家理解。
首先向大家明确一点,当你在程序中调用矩阵变换函数时,实际执行顺序调用顺序刚好相反,例如:

glm::mat4 trans;trans = glm::translate(trans, glm::vec3(0.5f, -0.5f, 0.0f));trans = glm::rotate(trans, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0));

调用顺序是先平移,再旋转。但是代码执行的时候,是先旋转后平移。这是为什么呢?主要是由于矩阵乘法右乘的特性。
假如有一个顶点假设我们有一个顶点(x, y, z),我们希望将其缩放2倍,然后位移(1, 2, 3)个单位。那么进行的矩阵运算则如下图所示:


上面图中每个矩阵中间都有数字,用于标记这个矩阵,和描述矩阵。
1矩阵 * 2矩阵 = 3矩阵。3矩阵 * 4向量 = 最终变换结果
也就是:
1矩阵 * 2矩阵 * 4向量= 最终变换结果
根据矩阵和向量运算的性质,4向量先和2矩阵运算,再和1矩阵运算。所有,调用顺序刚好和执行顺序相反。
明白了执行顺序和调用顺序不同之后,咱们再来了解下。变化顺序不同会带来什么影响。
比如先向右平移2个单位,再顺时针旋转90度,和先顺时针旋转90度,再向右平移2个单位,有啥区别?
上图:

让其先平移两个单位,再顺时针旋转90度后的图片如下:

如果先顺时针旋转90度,再向右平移2个单位,则与上图效果完全不一样。如下:

造成这种现象的主要原因是:变换操作是相对于当前位置来进行的
其他的类似,请大家举一反三。

OpenGL的矩阵变换详解——有图有真相相关推荐

  1. openGL API glVertexAttribPointer详解

    openGL API glVertexAttribPointer详解 文章目录 openGL API glVertexAttribPointer详解 一.官方文档 二.翻译 例子 运行结果 代码下载 ...

  2. openGL API glUniformMatrix4fv详解

    openGL API glUniformMatrix4fv详解 文章目录 openGL API glUniformMatrix4fv详解 官网 翻译 1.函数原型 2.参数列表: 3.描述: 4.描述 ...

  3. openGL API glProgramUniform详解

    openGL API glProgramUniform详解 前言 一.官方文档 二.翻译 例子 运行结果 代码下载 前言 openGL API 之glProgramUniform详解 一.官方文档 g ...

  4. OpenGL函数库详解

    1.glClear(GLbitfield mask); 功能:用预先设置的值清除缓冲区. 参数说明:mask指定被刷新的缓冲区,可以是GL_COLOR_BUFFER_BIT. GL_DEPTH_BUF ...

  5. OpenGL ES入门详解

    http://blog.csdn.net/wangyuchun_799/article/details/7736928 版权声明:本文为博主原创文章,未经博主允许不得转载.  1.决定你要支持的Ope ...

  6. iOS OpenGL 纹理坐标详解

    //顶点着色器 //v.shader//顶点着色器是一个可编程的处理单元,执行顶点变换.纹理坐标变换.光照.材质等顶点的相关操作,每顶点执行一次.替代了传统渲染管线中顶点变换.光照以及纹理坐标的处理, ...

  7. SpringBean生命周期详解 | 有图有真相

    文章目录 Spring IOC 1. 首先是谁控制谁? 2. 什么是反转? 3. 谁依赖谁? 4. 谁注入谁? spring ioc的加载过程 Spring Bean的生命周期 实例化 1.实例化前置 ...

  8. 欧尼酱讲JVM(17)——方法区详解有图有真相

    目录 位置图解 方法区的理解 方法区在哪里 方法区的基本理解 HotSpot中方法区的理解(演进过程) 方法区的内部结构 图解方法区内部结构 运行时常量池 class文件中常量池的理解 为什么需要常量 ...

  9. OpenGL gluLookAt函数详解

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 下面的一 ...

最新文章

  1. 在Ubuntu18.04上安装opencv 3.4.1
  2. 皖西学院微型计算机原理期末试卷,皖西学院 电气微机原理试卷A
  3. sklearn中cross_validation包无法使用
  4. AlphaGo之父亲授深度强化学习十大法则
  5. 听力阈值计算_中耳功能分析:临床听力测试的重要手段!
  6. 产品设计美学案例分析_美学在产品设计中的重要性
  7. 了解一下Elasticsearch的基本概念
  8. java创建对象过七夕,想 new 个对象过七夕,她却抛了异常
  9. java复习系列[3] - Java虚拟机
  10. The program ‘roscore‘ is currently not installed 解决办法
  11. linux 端口转发 udp,Linux Socat TCP/UDP端口转发及使用
  12. 城市空气质量监测系统解决方案
  13. Windows 各平台远程桌面客户端
  14. 4、混合、股票型基金
  15. 二元Weierstrass逼近定理及其证明
  16. Thread-Specific Storage Pattern
  17. 软件评测师:数据库知识
  18. (C#)Windows Shell 外壳编程系列总结
  19. 〖ChatGPT实践指南 - 零基础扫盲篇⑤〗- OpenAI API 演示 Demo 之宠物名字生成器
  20. 如何在 Mac 上卸载 Java

热门文章

  1. php-新特性之match解析
  2. 报表动态配置的技术实现
  3. 节日活动发布,选对H5让你在老板面前大放异彩!
  4. 如何寻找有价值的行业报告
  5. python有限元传热求解_有限元在传热学中的应用讲解
  6. 如何用U盘拷贝4G以上的文件?
  7. 关于Java RDP协议实现远程桌面连接的开源项目properjavardp
  8. php字符窜转json_php如何将字符串转换json
  9. 在线网校安装简易迅捷入门安装教程
  10. 迪士尼举办“好奇无界:米奇艺术展”中国巡展;延安万达嘉华及万达锦华酒店在延安红街开业 | 全球旅报...