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;

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

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

    实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...

  2. 三维投影总结:数学原理、投影几何、OpenGL教程、我的方法

    如果要得到pose视图,除非有精密的测量方法,否则进行大量的样本采集时很耗时耗力的.可以采取一些取巧的方法,正如A Survey on Partial of 3d shapes,描述的,可以利用已得到 ...

  3. RSA加密数学原理

    RSA加密数学原理 */--> *///--> *///--> UP | HOME RSA加密数学原理 Table of Contents 1 引言 2 RSA加密解密过程 2.1 ...

  4. PCA的数学原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维 数据的 ...

  5. PCA数学原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

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

    PCA 的数学原理和可视化效果 本文结构: 什么是 PCA 数学原理 可视化效果 1. 什么是 PCA PCA (principal component analysis, 主成分分析) 是机器学习中 ...

  7. word2vec 数学原理

    word2vec 是 Google 于 2013 年推出的一个用于获取词向量的开源工具包.我们在项目中多次使用到它,但囿于时间关系,一直没仔细探究其背后的原理. 网络上 <word2vec 中的 ...

  8. 非对称加密技术- RSA算法数学原理分析

    非对称加密技术,在现在网络中,有非常广泛应用.加密技术更是数字货币的基础. 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密. 但是对于其原理大部分同学应 ...

  9. PCA的数学原理(转)

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

随机推荐

  1. php 对数组按照字符串长度排序

    $file = file('zong.txt'); usort($file, 'sortByLen'); $handle = fopen('zong2.txt', 'a'); foreach ($fi ...

  2. NAT转换、VLAN与Trunk(特典:ACL初步)

    一.NAT(网络地址转换) 即公有地址转换为私有地址 私有地址段(非公网地址,即公网不识别) A       10.0.0.0            10.255.255.255 B       17 ...

  3. Postgres绿色版本安装 windows

    虽然PostgreSQL是为类UNIX平台开发的,但它却是可以移植的.从7.1版本开始,PostgreSQL可以编译安装和作为一个PostgreSQL服务器运行在Windows NT 4,2000,X ...

  4. leetcode — add-two-numbers

    import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * Source : https ...

  5. mysql查看表注释和字段注释的方法

    1.取字段注释 Select COLUMN_NAME 列名, DATA_TYPE 字段类型, COLUMN_COMMENT 字段注释from INFORMATION_SCHEMA.COLUMNSWhe ...

  6. 【翻译】WPF4.5新特性(MSDN的翻译读不太懂)

    我很在意WPF的发展,有人说微软不再维护WPF了,无所谓,随他去. MSDN上有简体版:http://msdn.microsoft.com/zh-cn/library/vstudio/bb613588 ...

  7. msql 必知必会笔记

    Edit Mysql 必知必会 第一章 理解SQL 什么是数据库 数据库(database) 保存有组织的数据的容器 什么是表  一组特定类型的数据的结构化清单 什么是模式  数据库和表的布局及特性的 ...

  8. Ansible系列(四):playbook应用和roles自动化批量安装示例

    Ansible系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html playbook是ansible实现批量自动化最重要的手段.在其中可以使用变 ...

  9. 模块,import,from xxx import xxx

    一,模块 模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀,总体来说,import加载的模块一共分成四个通用的类别: 1,使用python编写的py文件 2,已被变异 ...

  10. 使用 libjpeg 库解压数据示例

    static int MjpegDecompress( *** ) { struct jpeg_decompress_struct tDInfo; struct jpeg_error_mgr jerr ...