`
cloudtech
  • 浏览: 4611924 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

OpenGL中的矩阵存储方式

 
阅读更多

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

列优先:

m0 m4 m8 m12

m1 m5 m9 m13

m2 m6 m10 m14

m3 m7 m11m15

行优先:

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编程指南.pdf

    2.7.6使用缓冲区对象存储顶点数据数据 2.8属性组 2.9关于创建多边形表面模型的一些提示 2.9.1例子:创建一个二十面体 第3章视图 3.1简介:照相机比喻 3.2.1一个简单的例子:绘制立方体 3.1.2通用的变换函数 3.2视图...

    OpenGL ES 3. 非常好用的矩阵操作类

    如前述内容所介绍的知识,我们知道OpenGL ES中经常涉及到的矩阵有: a:投影矩阵:mProjMatrix; b:摄像机矩阵:mVMatrix; c:模型加载:currMatrix; 具体的各个函数方法都有详细的注释,直接上代码: import ...

    OpenGL超级宝典 笔记21 相关代码

    OpenGL超级宝典 笔记21 相关代码 用存储区块来传递变换矩阵

    矩阵的行主序与列主序的分析

     不管是D3D还是OpenGL,使用的矩阵都是线性代数标准的矩阵,只是在存储方式上有所不同。分别为:行主序(Direct3D),列主序(OpenGL)  存储顺序说明了线性代数中的矩阵如何在线性的内存数组中存储。  例如:内存中...

    OpenGL-Renderer:使用OpenGL和C ++制作的简单渲染器

    OpenGL渲染器 使用OpenGL和C ++制作的简单渲染器。 使用该存储库作为学习计算机图形学的漫长旅程的起点。 该渲染器将包括所有基本的渲染数据类型和图元作为学习... 有两个主要资源帮助我了解了此存储库中的内容。 :D

    opengl-model-viewer:使用OpenGL和C ++的.stl文件的实时渲染器

    GLFW设置,OpenGL设置,输入处理功能和主渲染循环camera.hpp / cpp 摄像头类别:存储摄像头位置和角度状态,处理摄像头移动和FOV调整,计算视图和投影矩阵mesh.hpp / cpp 网格类别:加载和存储网格顶点和索引,绘制...

    pg:Python OpenGL图形框架

    pg:Python图形框架 pg是用于Python的轻量级高级OpenGL图形框架。 这是一项正在进行的工作。 教程 此处提供了基本教程: 特征 ...克隆存储库并运行main.py,以查看这些示例以及其他一些示例。 3D管道:

    Android 3D游戏开发技术宝典-OpenGL ES 2.0 (吴亚峰) 源代码

    3.2.3 opengl es中立体物体的构建 97 3.3 主流android手机gpu大pk 98 3.3.1 手机gpu四大家族对比 99 3.3.2 主流gpu的性能参数比较 103 3.4 本章小结 104 第4章 着色语言shading language 105 4.1...

    C ++网格+点云可视化器-C/C++开发

    使用Eigen矩阵存储数据,这对于已经使用Eigen的项目很方便。 C ++网格+点云可视化工具一种用于网格和点云的基本OpenGL可视化工具。 使用Eigen矩阵存储数据,这对于已经使用Eigen的项目很方便。 使用meshview创建的...

    欧拉公式求圆周率的matlab代码-util3d:使用OpenGL的3D图形C实用程序模块

    util3d是C模块和标头的集合,为在OpenGL中使用3D图形的程序员实现有用的功能。 此代码可根据的条款使用,并且对于任何和所有使用都是免费的。 —实现了一个右手3D数学库,该库支持三分量矢量,四乘四矩阵,四元数和...

    jogl-examples:JOGL(Java OpenGL)范例

    自2018年6月7日起,该存储库将不再在此处更新。 所有更新和其他项目现在都将在 JOGL(Java OpenGL)范例 具有3个矩阵的着色器 灯具的小修理: // updating lamps eye space position for (int i = 0; i<lamps....

    基于OpenGL、OpenCV实现的美颜滤镜、贴纸效果以及大眼效果demo.zip

    Core:包含基本的数据结构(如cv::Mat用于图像存储和操作)、基本的图像和矩阵操作、数学函数、文件I/O等底层功能。 ImgProc:提供图像预处理、滤波、几何变换、形态学操作、直方图计算、轮廓发现与分析等图像...

    Android 4游戏编程入门经典

     11.3.4 opengl es中如何对光照过程进行运算:顶点法线  11.3.5 实践  11.3.6 关于opengl es中光照应用的一些建议  11.4 材质变换(mipmapping)  11.5 简单的照相机  11.5.1 第一人称照相机或欧拉照相机  ...

    取次对角线数据matlab代码-libigl:我学习的库,并使用LP范数用于N-polyvector字段

    大多数工具都适合在通用三角形网格上运行,该三角形网格存储在顶点位置V的n×3矩阵和三角形索引F的m×3矩阵中。 可选地,该库也可以放入静态链接的库中,以缩短与项目的编译时间。 这仅影响编译时间(运行时性能和...

    WebGL编程指南压缩包

    原书名:WebGL Programming Guide: Interactive 3D Graphics Programming with WebGL (OpenGL) 原出版社: Addison-Wesley Professional 作者: (美)Kouichi Matsuda Rodger Lea(松田浩一,罗杰.李) 译者: 谢光磊 ...

    WebGL编程指南

    427 角度和三角函数 428 指数函数 429 通用函数 430 几何函数 433 矩阵函数 434 矢量函数 435 纹理查询函数 436 附录C 投影矩阵 437 正射投影矩阵 437 透视投影矩阵 437 附录D WebGL/OpenGL :左手还是右手坐标系?...

    webgl编程指南及源码1/2

    共冶一炉(模型矩阵、视图矩阵和投影矩阵) 252 示例程序(PerspectiveView_mvp.js) 254 用示例程序做实验 257 正确处理对象的前后关系 258 隐藏面消除 260 示例程序(DepthBuffer.js) 262 深度冲突 263 ...

    webgl编程指南及源码2/2

    共冶一炉(模型矩阵、视图矩阵和投影矩阵) 252 示例程序(PerspectiveView_mvp.js) 254 用示例程序做实验 257 正确处理对象的前后关系 258 隐藏面消除 260 示例程序(DepthBuffer.js) 262 深度冲突 263 ...

Global site tag (gtag.js) - Google Analytics