OpenGL 矩阵 行序 列序
来源:互联网 发布:java api1.6文档下载 编辑:程序博客网 时间:2024/06/07 12:12
最近进入了OpenGL的学习,感觉内容很有意思,但是毕竟之前没有学习过相关的数学知识,所以遇到很多知识点要去查很多资料反复思考才能慢慢领会,但是这也正是学习的乐趣,通过努力解决掉一个个问题,感觉真是倍爽。 今天就对遇到的矩阵行序和列序左个记录,以便以后查阅。 在进入OpenGL之前,都是用的Windows下的API进行绘图,自己编写的2D渲染管线,这里用的是左手坐标系,设置的矩阵都是按行序优先的,渲染顺序是世界坐标系矩阵,投影矩阵,视口矩阵 但是在进入用OpenGL提供的glut时,老师讲的就与之前的相反了,讲到OpenGL的顺序是视口矩阵,投影矩阵,世界坐标系矩阵,老师叫我们先下去自己查看资料理解,开始查看了一些资料还是一头雾水,但是经过一阵努力后还是终于整明白了,还是印证了毛主席说的一句话:所有资本主义都是纸老虎>_<,呵呵,好像跟这句话有点不搭嘎吧! 还是进入正题,为什么有这种区别呢?原来是与两个的矩阵设置不同有直接关系, d3d行优先,opengl列优先,比如: 比如一个4x4矩阵[m11,m12,m13,m14 m21,m22,m23,m24 m31,m32,m33,m34 m41,m42,m43,m44] 在opengl中这个matrix中数据的顺序是先遍历列的,线性存储为{m11,m21,m31,m41,m12,m22,m32......},这被称为矩阵的列序(column-major)存储,我们使用GlGetfloatv(GL_MODELVIEW_MATRIX,...)等得到的存储矩阵的数组都是按照这样的顺序存储矩阵的。 但是在d3d中这个matrix的存储顺序确实先遍历行的,也就是存储为{m11,m12,m13,m14,m21,m22,m23,m24,m31,......}称为行序(row-major)存储,可能多数人认为这种存储顺序更“自然”,(其实我也这么觉得),这种存储方式也被称为是c-style的,好像是大多数系统里是按照行序存储矩阵的。 矩阵乘法并不关心矩阵是行矩阵还是列矩阵,都是按照第一个矩阵的行去乘以第二个矩阵的列。对于列矩阵而言,这正是其蹩脚的地方,为了保证乘法意义的有效性,其坐标变换顺序跟矩阵乘法顺序恰好相反。 所以OpenGL需要做一次转置,如果是先缩放,再旋转,最后平移,对应的矩阵分别为S、R、T,则d3d的最终矩阵为M = S * R * T,opengl为M = T * R * S,同样的渲染顺序也一样。
查阅资料
http://blog.csdn.net/you_lan_hai/article/details/37992123
http://blog.csdn.net/leonwei/article/details/4318912
阅读全文
0 0
- OpenGL 矩阵 行序 列序
- 详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储
- 详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储
- opengl 矩阵
- opengl 矩阵
- 矩阵变换,及其矩阵在DirectX和OpenGL中的应用中的问题:左乘/右乘、行优先/列优先
- 矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,...
- 【OpenGL】OpenGL矩阵变换详解
- OpenGL的变换矩阵
- opengl 矩阵变换
- opengl 约定 & 矩阵转换规则
- OpenGL和矩阵
- OpenGL中的转换矩阵
- OpenGl 中的旋转矩阵
- opengl 矩阵变换
- OpenGL ES 矩阵变化
- opengl 矩阵变换
- opengl矩阵变换总结
- 强化学习笔记01,02——强化学习问题和Multi-arm Bandits
- 用opensmile批量提取语音特征
- hadoop-hdfs-架构
- Linux下的共享内存
- python leetcode相关题目
- OpenGL 矩阵 行序 列序
- (三)UI绘制流程-流式布局
- 2011蓝桥杯 最小公倍数 NOYJ517
- Java定时任务调度工具-Timer
- 实现手机左右滑屏效果
- 2017暑期实习面经分享(大数据&Java&后台)
- c++---回文数
- Tornado——一个异步web服务器
- Java首选项Preferences