OpenGL的矩阵变换详解——有图有真相
来源:互联网 发布:文华期货趋势指标源码 编辑:程序博客网 时间:2024/06/06 02:24
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个单位,则与上图效果完全不一样。如下:
造成这种现象的主要原因是:变换操作是相对于当前位置来进行的。
其他的类似,请大家举一反三。
1 0
- OpenGL的矩阵变换详解——有图有真相
- 【OpenGL】OpenGL矩阵变换详解
- OpenGL的变换矩阵
- OpenGL 入门基础教程 —— 矩阵的变换
- opengl的变换和矩阵
- opengl的GL_PROJECTION变换矩阵
- 详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储
- 详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储
- OpenGL基本概念入门3——矩阵变换
- 关于Opengl各种矩阵变换的理解
- OpenGL中视口变换的矩阵求解
- OpenGL 矩阵变换GLM库的使用
- OpenGL 矩阵变换GLM库的使用
- OpenGL 矩阵变换GLM库的使用
- opengl 矩阵变换
- opengl 矩阵变换
- opengl 矩阵变换
- opengl矩阵变换总结
- ab压力测试
- C#读网卡MAC地址-WMI方法
- c++模板类&&模板函数
- 原生js ajax 操作
- MySql修改配置允许远程连接
- OpenGL的矩阵变换详解——有图有真相
- Html部分使用元素英文
- Servlet中的response对象
- RabbitMQ(三)
- JavaScript语言基础---(三)流程控制语句
- 浅谈程序员的归宿问题
- cureftp 上传文件没有权限问题
- Memory Systems
- Gradle 1.12用户指南翻译——第六十章. 初始化脚本