转自skyman_2001的博客
在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中矩阵的存储方式相关推荐

  1. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  2. Matlab中数据的存储方式

    简介 MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利.然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待.未解决这个问题, ...

  3. 转载——C语言中float,double类型,在内存中的结构(存储方式)

    最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...

  4. C++ opengl 对OpenGL中矩阵设置的初步认识

    对OpenGL中矩阵设置的初步认识: 在入门级的代码里面,通常在初始化OpenGL中可以看到这样的代码: void init(){glMatrixMode(GL_PROJECTION);gluPers ...

  5. c语言中负数的读取和存储,C语言中负数的存储方式

    详细介绍负数的文章: https://blog.csdn.net/daiyutage/article/details/8575248 1.以char类型举例,其取值范围是 -128 ~ 127,即-2 ...

  6. 数据分析中常见的存储方式

    点击上方"大话coding",选择"星标"公众号 重磅干货,第一时间送达 大家好,我是小轩 这两天整理了在数据分析中常见的5种存储格式 内容比较多,只是简要整理 ...

  7. Android中的数据存储方式

    Android数据存储的5中方式总结: A:使用SharedPreferences存储方式 B:文件存储数据 C:SQLite数据库存储数据 D:使用ContentProvider存储数据 E:网络存 ...

  8. C语言中的数据存储方式

    这篇文章主要是关于C语言中整形.字符型的变量是如何存储整形数字.是如何.何时发生整形提升,以及还有打印方式的不同打印的数字也不同的知识补充. int与unsigned int: int是在内存中是4个 ...

  9. java存储数据_Java中六种数据存储方式

    存储数据 1.寄存器(register).这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直接控制,也不能在程序中 ...

  10. 一篇文章让你了解视频监控系统搭建过程中如何选择存储方式

    作为安防视频流媒体服务器软件的提供商,我们日常项目中遇到的需求主要是搭建一整套完整的视频监控系统,包括前端摄像头.线缆.传输系统.存储系统.解码拼控和大屏设备等组成.存储系统是整个监控系统中最为重要的 ...

最新文章

  1. Visual Studio 2005 Web Application Projects 正式推出
  2. oracle最佳环境,创建最适合的Oracle运行环境
  3. 部分用户称苹果iPad Air 5产品质量下降 外壳有异响
  4. 下载Nagios监控软件步骤
  5. 【bzoj1699/USACO2007】Balanced Lineup排队——RMQ问题
  6. 喜马拉雅音频下载+x2m文件转换
  7. VS2003一点查找按钮就卡死处理方法
  8. 坚果云下载的文件夹在哪_文件管理软件Zotero+坚果云配置之小白教程,与大家交流...
  9. 技术资源分享(更新中)
  10. Javaweb中上传图片,获取相对路径,绝对路径
  11. 爱心跳动-HTML-抖音火的那个
  12. 关于module ‘datetime‘ has no attribute ‘now‘报错解决方案
  13. 免费馅饼 (数据结构)
  14. 构建自己的碎片知识体系
  15. 目录:吴恩达机器学习课后作业
  16. rop和rop2的题目的wp
  17. 笔记本外接显示器掉帧解决方法
  18. 在服务器上虚拟w7,如何在虚拟机中获取Win7 Aero特效(图)
  19. Word去除页眉下的横线
  20. 系统出现非法操作错误解决对策

热门文章

  1. 日期格式化跨年bug,是否与你不期而遇?
  2. 计算机存储盘设置密码,如何在USB驱动器上设置密码并教您如何设置
  3. HI3861学习笔记(17)——NFC标签NT3H1201使用
  4. ios 制作方形头像
  5. 设计用于环境监测的无线传感网多跳数据采集、传输系统。在PC机上能显示当前测得的温/湿度、光照等环境信息。当光照超过一定阈值时,感知节点通过LED信号灯给以报警。
  6. VSCode选择远程服务器的虚拟环境
  7. Python爬虫实现网页自动刷票
  8. 【翻译:OpenCV-Python教程】OpenCV里的直方图
  9. macbook黑屏_Mac Book突然黑屏开不了机怎么办
  10. 5分钟学会使用Excel插入数据统计图