Opengl正交矩阵 glOrthof 数学原理(转)

http://blog.sina.com.cn/s/blog_6084f588010192ug.html

在opengles1.1中设置正交矩阵只要一个函数调用就可以了:glOrthof,但是opengles2.0开始,为了增加渲染灵活性摆脱了固定管道渲染,这样就需要手动去实现glOrthof所对应的矩阵。

在iphone3D 编程一书中给出了这个矩阵的定义:

void RenderingEngine2::ApplyOrtho(float maxX, float maxY) const

{

float a = 1.0f / maxX;

float b = 1.0f / maxY;

float ortho[16] = {

a, 0,  0, 0,

0, b,  0, 0,

0, 0, -1, 0,

0, 0,  0, 1

};

GLintprojectionUniform = glGetUniformLocation(m_simpleProgram, "Projection");

glUniformMatrix4fv(projectionUniform, 1, 0, &ortho[0]);

}

这个函数用于将3d正交矩阵投影到xy平面,也就是转换到二维平面,也就是需要舍掉一个纬度。这里需要舍掉z轴,也就是z轴为零。

对矩阵分解成四个向量

float ortho[16] = {

a, 0,  0, 0,

0, b,  0, 0,

0, 0, -1, 0,

0, 0,  0, 1

};

Ix(a,0,0,0),  Iy(0,b,0,0) , Iz(0,0,-1,0)  ,   Iw(0,0,0,1)

正常情况投影到xy平面z向量应该为零,这里他设置成了-1,有点不解,难道说是说z方向上的裁减范围,有待进一步研究。对于w了向量,是为了计算方便,可以不考虑。

float a = 1.0f / maxX;

float b = 1.0f / maxY;

对于a,b因为最终的向量要进行缩放以适应屏幕,所以这里是对x,y进行缩放的因子(把屏幕宽高理解为一个单位就好理解了)。

再来看一下对应的顶点着色器文件

const char* SimpleVertexShader = STRINGIFY(

attribute vec4 Position;

attribute vec4 SourceColor;

varying vec4DestinationColor;

uniform mat4 Projection;

uniform mat4 Modelview;

void main(void)

{

DestinationColor = SourceColor;

gl_Position = Projection * Modelview * Position;

}

);

这一行正是对映射到屏幕上点的最终变换

gl_Position = Projection * Modelview * Position;

时间: 2024-10-06 20:33:02

Opengl正交矩阵 glOrthof 数学原理(转)的相关文章

OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle::CS_ORBIT”. b.键盘WSAD键移动镜头,鼠标拖拽改变镜头方向,类似于OGRE中的“OgreBites::CameraStyle::CS_FREELOOK”. 1.坐标变换的一个例子,两种思路理解多个变换的叠加 现在考虑Scale(1,2,1); Transtale(2,1,0); Rot

图像处理中的数学原理详解17——卷积定理及其证明

欢迎关注我的博客专栏"图像处理中的数学原理详解" 全文目录请见 图像处理中的数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 图像处理中的数学原理详解(已发布的部分链接整理) http://blog.csdn.net/baimafujinji/article/details/48751037 1.4.5   卷积定理及其证明 卷积定理是傅立叶变换满足的一个重要性质.卷积定理指出,函数卷积的傅立叶变

word2vec 中的数学原理详解

word2vec 中的数学原理详解 word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了很多人的关注.由于 word2vec 的作者 Tomas Mikolov 在两篇相关的论文 [3,4] 中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感.一些按捺不住的人于是选择了通过解剖源代码的方式来一窥究竟. 第一次接触 word2vec 是 2013 年的 10 月份,当时读了复旦大学郑骁庆老师发表的论文

PCA的数学原理

PCA(Principal Component Analysis)主成成分分析法,是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维.网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理.这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么. 当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学

图像处理中的数学原理详解18——内积与外积

欢迎关注我的博客专栏"图像处理中的数学原理详解" 全文目录请见 图像处理中的数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 图像处理中的数学原理详解(已发布的部分链接整理) http://blog.csdn.net/baimafujinji/article/details/48751037 1.3.2 内积与外积 因为cos(π/2)=0.当然,这也是众多教科书上介绍向量内积最开始时常常用到的一

【机器学习笔记之七】PCA 的数学原理和可视化效果

PCA 的数学原理和可视化效果 本文结构: 什么是 PCA 数学原理 可视化效果 1. 什么是 PCA PCA (principal component analysis, 主成分分析) 是机器学习中对数据进行降维的一种方法. 例如,我们有这样的交易数据,它有这几个特征:(日期, 浏览量, 访客数, 下单数, 成交数, 成交金额),从经验可知,“浏览量”和“访客数”,“下单数”和“成交数”之间会具有较强的相关关系.这种情况下,我们保留其中的两个维度就可以保证原有的信息完整. 但是当我们在做降维的

反向传播(Backpropagation)算法的数学原理

准备 本文不是一篇引导读者入门的科普文.读者至少需要对人工神经网络有概念性的理解,并且熟悉偏导数. 这是一个简单的人工神经网络,分为输入层,隐藏层和输出层.输入层以原始数据 x 作为本层向下一层的输出,即 a(1):隐藏层将 a(1) 中的元素进行线性组合作为自己的输入,即 z(2),然后将 z(2) 进行一个数学变换(函数 g(z))作为对下一层的输出,即 a(2).以此类推,得到最后一层的输出,即 a(3) 或 hΘ(x),就是人工神经网络的运算结果. 其中 Θ(1), Θ(2) 分别是第1

图像处理中的数学原理具体解释21——PCA实例与图像编码

欢迎关注我的博客专栏"图像处理中的数学原理具体解释" 全文文件夹请见 图像处理中的数学原理具体解释(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 假设你对PCA的推导和概念还不是非常清楚.建议阅读本文的前导文章 http://blog.csdn.net/baimafujinji/article/details/50372906 6.4.3 主成分变换的实现 本小节通过一个算例验证一下之前的推导.在前面给出的

图像处理中的数学原理详解21——PCA实例与图像编码

欢迎关注我的博客专栏"图像处理中的数学原理详解" 全文目录请见 图像处理中的数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 图像处理中的数学原理详解(已发布的部分链接整理) http://blog.csdn.net/baimafujinji/article/details/48751037 如果你对PCA的推导和概念还不是很清楚,建议阅读本文的前导文章 http://blog.csdn.net/