本文主要是对红宝书(第八版)第五章中给出的透视投影矩阵和正交投影矩阵做一个简单推导。投影矩阵的目的是:原始点P(x,y,z)对应后投影点P'(x',y',z')满足x',y',z'∈[-1,1]。

  一、透视投影                                                                                                                    

  下图为透视投影的视锥体:

注:上图中忘了标注了,远裁剪平面距离原点距离为f,近裁剪平面距离原点距离为n。

设P(x0, y0, z0),我们分别求各个坐标在投影后的值。将P点投影到近平面上,首先看x方向上的投影,沿着过P点,且平行于xoz平面切一刀,有如下图:

假设投影后的x坐标为:x_n(在近裁剪平面的投影),由相似三角形的性质,有

,可以得到:

同理,有

这样其实实现了透视投影,近大远小的效果,因为z0越大,则x1,y1就越小。为了将这两个值转换到[-1,1]区间内,设l和r分别为近裁剪平面左、右边框的x坐标,即l=-w/2,r=w/2(如图所示,w为上下边框的长度),为了使任何投影到近裁剪平面的点都在区间内,转换后,[l',r']∈[0,1],其中l',r'分别为l和r转换后的值。因为是线性转换,可领x'=kx+b,则下式成立:

求得,

再根据之前的结果,可以得到归一化后的x坐标为:

同理,设t和p分别为近裁剪平面上下边框的y坐标,则:

投影后的坐标都有一个共同因子——[-1/z0],正好对应变换后w=-z0。

接下来,我们看z要满足什么要求。为简化讨论,根据以上结论,我们假设透视变换有下述形式:

于是:

最后的变换矩阵如下:

OpenGL中投影矩阵的推导的更多相关文章

  1. OpenGL中投影矩阵基础知识

    投影矩阵元素Projection Matrix 投影矩阵构建: 当f趋向于正无穷时: 一个重要的事实是,当f趋于正无穷时,在剪裁空间中点的z坐标跟w坐标相等.计算方法如下: 经过透视除法后,z坐标变为 ...

  2. 关于opengl中的矩阵平移,矩阵旋转,推导过程理解 OpenGL计算机图形学的一些必要矩阵运算知识

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12166896.html 为什么引入齐次坐标的变换矩阵可以表示平移呢? - Yu Mao的回答 ...

  3. (转)投影矩阵的推导(Deriving Projection Matrices)

    转自:http://blog.csdn.net/gggg_ggg/article/details/45969499 本文乃<投影矩阵的推导>译文,原文地址为: http://www.cod ...

  4. OpenGL中的矩阵相乘

    OpenGL中的矩阵相乘 1, 在OpenGL中所有的视图变换,模型变换 都是4×4矩阵,每个后续的glMultiMatrix*(N),或者变换函数,glTranslate* (),glRotate* ...

  5. [OpenGL](翻译+补充)投影矩阵的推导

    1.简介 基本是翻译和补充 http://www.songho.ca/opengl/gl_projectionmatrix.html 计算机显示器是一个2D的平面,一个3D的场景要被OpenGL渲染必 ...

  6. OpenGL中摄像机矩阵的计算原理

    熟悉OpenGL|ES的朋友,可能会经常设置摄像机的view矩阵,iOS中相对较好,已经封装了方向,只需要设置摄像机位置,目标点位置以及UP向量即可.下面先介绍下摄像机view矩阵的计算原理.此处假设 ...

  7. 【脚下生根】之深度探索安卓OpenGL投影矩阵

    世界变化真快,前段时间windows开发技术热还在如火如荼,web技术就开始来势汹汹,正当web呈现欣欣向荣之际,安卓小机器人,咬过一口的苹果,winPhone开发平台又如闪电般划破了混沌的web世界 ...

  8. Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵

    我们如今准备好在代码中加入透视投影了. Android的Matrix类为它准备了两个方法------frustumM()和perspectiveM(). 不幸的是.frustumM()的个缺陷,它会影 ...

  9. OpenGL中两种计算投影矩阵的函数

    OpenGL无意间同时看到两种创建投影矩阵的写法,可以说它们完成的是同样的功能,但写法完全不同,可以观摩一下什么叫做异曲同工之妙... 第一种: gltMakeShadowMatrix函数是重点 // ...

随机推荐

  1. WPF-实现Windows 7 样式 Aero TreeView 控件

    关于实现Windows 7 样式 Aero TreeView 控件的具体过程可以参考如下文章 http://www.cnblogs.com/o2ds/archive/2010/06/22/176302 ...

  2. 关于Simple.Data.PostgreSql的ExecuteReader没实现非常坑爹的问题

    https://github.com/ChrisMH/Simple.Data.PostgreSql/issues/3 github上有个issues...默认从nuget上下载的Simple.Data ...

  3. 奖学金评分系统(系统分析与设计版与Delphi实现代码)

    一.系统规划 1.1 项目背景介绍 在奖学金评比过程中,学生综合测评是学校普遍采用的评比手段.对学生实施综合素质测评的目的在于正确评价学生的综合素质,为评奖学金提供依据,实现学生教育管理工作的标准化. ...

  4. JS 原型链图形详解

    JS原型链 这篇文章是「深入ECMA-262-3」系列的一个概览和摘要.每个部分都包含了对应章节的链接,所以你可以阅读它们以便对其有更深的理解. 对象 ECMAScript做为一个高度抽象的面向对象语 ...

  5. MVC使用的MetaModel代码生成器模板

    代码生成器能使从一些重复的工作中缓解下来 在最近开发MVC项目中使用到了MetaModel用来设定Model的显示名称,数据限制的代码生成模板,自己第一做代码生成模板还有很多缺陷. 下面是模板代码: ...

  6. bnuoj 4357 传送阵

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4357 [题意]:在1000个数中选择3个之和是m的倍数,可能有多种选择方案,请输出标号排序最小的一组 ...

  7. 2329: [HNOI2011]括号修复 - BZOJ

    恶心的splay,打标记的时候还有冲突,要特别小心 上次写完了,查了半天没查出错来,于是放弃 今天对着标程打代码,终于抄完了,我已经不想再写了 const maxn=; type node=recor ...

  8. 3.9 spring-自定义标签解析

    到这里,我们已经完成了分析默认标签的解析与提取过程,或许设计的内容太多,我们忘了我们是冲哪个函数开始了的, 让我们再次回顾一下默认标签解析方法的起始方法. 入口如下: /** * Parse the ...

  9. overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet 错误解决

    使用java代码连接hbase服务器报错:  java.lang.VerifyError: class org.apache.hadoop.hdfs.protocol.proto.ClientName ...

  10. LESS CSS 总结

    1.LESS 简介 less是动态的样式表语言,通过简洁明了的语法定义,使编写 CSS 的工作变得非常简单 类似Jquery框架 中文网站: http://www.lesscss.net/ 2.编译工 ...