矩阵的行序和列序存储
来源:互联网 发布:慧电商淘宝插件 编辑:程序博客网 时间:2024/06/07 12:38
在图形处理中,矩阵操作时最基本的操作,但是不同的系统中对矩阵的存储是不同,比如OpenGL和Cg中就是不一样的:
比如一个4x4矩阵[m11,m12,m13,m14
m21,m22,m23,m24
m31,m32,m33,m34
m41,m42,m43,m44],
在实现中通常将其存储为一个一维的线性数组如float matrix【16】或者float* matrix。
在opengl中这个matrix中数据的顺序是先遍历列的,线性存储为{m11,m21,m31,m41,m12,m22,m32......},这被称为矩阵的列序(column-major)存储,我们使用GlGetfloatv(GL_MODELVIEW_MATRIX,...)等得到的存储矩阵的数组都是按照这样的顺序存储矩阵的。
但是在cg中这个matrix的存储顺序确实先遍历行的,也就是存储为{m11,m12,m13,m14,m21,m22,m23,m24,m31,......},称为行序(row-major)存储,可能多数人认为这种存储顺序更“自然”,(其实我也这么觉得),这种存储方式也被称为是c-style的,好像是大多数系统里是按照行序存储矩阵的。
不同的系统对矩阵的存储方式不一样,如果在程序中综合使用了不同的框架,就要注意进行统一了,比如你在opengl 中使用了CG脚本的时候,例如一个cg程序void programm(uniform float4x4 modelviewMatrix,... ...)要求你从程序中传入一个modelview矩阵,我们在程序中使用opengl的GlGetfloatv()函数得到了float* glmatrix 为这个modelview矩阵,但是这个glmatrix确不能直接赋给modelviewMatrix供cg使用,因为cg在解析这个glmatrix 会把它解析为行序的,我们可以在让modelviewMatrix得到glmatrix 后,调用transfor()将modelviewMatrix做一个转置,modelviewMatrix就变成cg所能正确解析的行序的了。
行序和列序的转换其实就是一个矩阵的转置关系,虽然这个变换很简单,但是在使用不同的框架时,要记得先注意一下这个系统式采用哪种方式存储矩阵的,才不会犯错。
- 矩阵的行序和列序存储
- matlab 交换矩阵的行和列
- 详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储
- 详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储
- 利用二维数组存储一个5行6列的单位矩阵,并按矩阵和转置矩阵形式输出
- Matlab矩阵的按列存储理解
- 矩阵的存储顺序:按行优先存储 vs. 按列优先存储
- 数据存储的行存储和列存储
- 行存储和列存储
- 行存储和列存储
- 利用二维数组存储一个3行4列的单位矩阵,并输出最大值和最小值
- HANA数据库的行存储和列存储
- 列存储、行存储之间的关系和比较
- 列式存储和行式存储的区别
- 行式存储和列示存储的区别
- 将矩阵含有0所在的行和列清零
- 稀疏矩阵的列序递增法和一次定位快速转置法
- OpenGL 矩阵 行序 列序
- 用jacob将excle转为html
- jboss安装与配置
- c# 委托的应用
- How-To: Email Alerting for the Snort Intrusion Detection System
- 系统服务和普通FORMS程序共存一体的实现
- 矩阵的行序和列序存储
- 如何在网页中嵌入Media player 播放流媒体
- js 是实现顶部弹出广告
- linux编程笔记
- QT学习笔记之十 Ticker
- Oracle分析函数学习笔记
- Command Line Applications with Visual Studio 2008 and C++ Posted by omniplex in Errors
- 如何设置当鼠标停留的时候改表格背景色变成另外一种色
- 网络编程技术(三)