OpenGL中的矩阵存储方式

原创 2007年10月14日 17:32:00

  选择自 skyman_2001 的 Blog

在OpenGL中,矩阵是以列优先的方式(column-major order)存储的,而一般的数学书上是以行优先的方式(row-major order)存储的。 

列优先:

m0     m4     m8     m12

m1     m5     m9     m13

m2     m6     m10   m14

m3     m7     m11   m15

行优先:

 m0     m1     m2     m3

 m4     m5     m6     m7

 m8     m9     m10    m11

 m12   m13   m14   m15

  在OpenGL中,矩阵是用一维数组来保存的:m[16]。

可以用ARB_transpose_matrix来实现2者的转换:

    New functions and tokens are added allowing application matrices
    stored in row major order rather than column major order to be
    transferred to the OpenGL implementation.  This allows an application
    to use standard C-language 2-dimensional arrays (m[row][col]) and
    have the array indices match the expected matrix row and column indexes.
    These arrays are referred to as transpose matrices since they are
    the transpose of the standard matrices passed to OpenGL.

    This extension adds an interface for transfering data to and from the
    OpenGL pipeline, it does not change any OpenGL processing or imply any
    changes in state representation.
提供的函数:

    void LoadTransposeMatrix{fd}ARB(T m[16]);
    void MultTransposeMatrix{fd}ARB(T m[16]);

提供的标记(对GetBooleanv, GetIntegerv, GetFloatv, GetDoublev函数):

 TRANSPOSE_MODELVIEW_MATRIX_ARB   
TRANSPOSE_PROJECTION_MATRIX_ARB   
TRANSPOSE_TEXTURE_MATRIX_ARB   
TRANSPOSE_COLOR_MATRIX_ARB  

LoadTransposeMatrixARB(m)相当于:

 float n[16];
transpose(m,n)
LoadMatrix(n);

MultTransposeMatrixARB(m)相当于:

 float n[16];
transpose(m,n);
MultMatrix(n);

GetFloatv(TRANSPOSE_MODELVIEW_MATRIX_ARB,m)相当于:

 float n[16];
GetFloatv(MODELVIEW_MATRIX_ARB,n);
transpose(n,m);

TRANSPOSE_PROJECTION_MATRIX_ARB,TRANSPOSE_TEXTURE_MATRIX_ARB和 TRANSPOSE_COLOR_MATRIX_ARB类似。

详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储

详解OpenGL的坐标系、投影和几何变换 OPengl的渲染流程是先全部设置好数据和状态,GL_MODELVIEW是将当前要变换的空间向量和模型视图矩阵当前最顶矩阵(会乘以摄像机变换乘投影矩阵的矩阵得...
  • Blues1021
  • Blues1021
  • 2016年05月06日 10:58
  • 999

稀疏矩阵的存储格式(Sparse Matrix Storage Formats)

稀疏矩阵的存储格式(Sparse Matrix Storage Formats) Sason@CSDN   对于很多元素为零的稀疏矩阵,仅存储非零元素可使矩阵操作效率更高。现有许多种稀疏矩阵的存...
  • anshan1984
  • anshan1984
  • 2013年02月14日 23:06
  • 14306

C++实现对称矩阵以及压缩存储

#include using namespace std; ///////////////////////////实现对称矩阵以及压缩存储///////////////////////////////...
  • z517602658
  • z517602658
  • 2017年04月21日 11:59
  • 1090

OpenGL系列教程之五:OpenGL矩阵类

相关主题:OpenGL变换,OpenGL投影矩阵,四元数 下载:matrix.zip, matrix_rowmajor.zip 概述构造&初始化存取操作矩阵算法变换函数例子:模型视...
  • wozhengtao
  • wozhengtao
  • 2016年09月26日 17:08
  • 1513

OpenGL 矩阵的旋转-平移-缩放

1.  openGL的矩阵 openGL的矩阵是列优先排序的。就是说,矩阵的数据是存贮在一维数组中,数据上传到openGL处理的时候,会把一维数据的每一行当做列来处理。比如说,一个4*4的矩阵在数...
  • tom_221x
  • tom_221x
  • 2015年03月25日 20:32
  • 3141

OpenGL系列教程之五:OpenGL矩阵类

相关主题:OpenGL变换,OpenGL投影矩阵,四元数 下载:matrix.zip 概述 构造&初始化 存取操作 矩阵算法 变换函数 例子:模型视图矩阵 例子:投影矩阵 概述 O...
  • u012501459
  • u012501459
  • 2013年10月22日 11:18
  • 3547

关于Opengl各种矩阵变换的理解

关于Opengl各种矩阵变换的理解 OpenGL的矩阵变换一直比较迷糊,貌似懂了又貌似不懂,今天貌似懂了过几天又貌似忘记怎么回事了,还是没有理解透彻,因此痛下决心,一定要把这个事情弄懂。经过几天的反...
  • lihei12345
  • lihei12345
  • 2015年01月17日 22:58
  • 1823

数据结构:矩阵的压缩存储(特殊矩阵)

// 对称矩阵的压缩存储 /* 满足a[i][j] = a[j][i] 0
  • s634772208
  • s634772208
  • 2015年05月08日 13:45
  • 932

OpenGL ES 矩阵变换及其数学原理

矩阵变换及其数学原理引子推荐这篇文章线性代数的本质,这篇文章挺不错的,揭示了矩阵和向量的内涵。首先概要性的提一下 向量刻画的是线性空间中的对象。 矩阵刻画的是向量在线性空间中的运动(变换,跃迁),相似...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2016年10月24日 10:41
  • 1692

OpenGL中的矩阵变换(上)

OpenGL中的矩阵变换(上)  自己稍微提及了NEHE的"3D矩阵求逆"方法之高,并谈了谈自己的一点拙略理解。呵呵,然后,既然如此,一不做二不休,在本篇中得继续乱弹一下下,关于OpenGL矩阵的理...
  • budingningmeng
  • budingningmeng
  • 2013年03月28日 15:12
  • 1422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL中的矩阵存储方式
举报原因:
原因补充:

(最多只允许输入30个字)