http://wenku.baidu.com/link?url=wDkyQR9fDI_tZas1BlMRUnNNoKwiQDygltm2wWxRr_sDwcDB51_QCDfR4Gb5wYrIUZ_tYxpjhZcquYeBgOC2Ce5tH-I6npzKEqtHZ9zFNt7

 转载自:http://wenku.baidu.com/view/f478d71aa8114431b90dd870.html
 
 
 
 

这几个参量,也可以根据视野(

FOV

Field Of View

)参量来求得。下面是两

个平面的视野关系图:

 
 

其中,

两个

fov

分别是在

x-z

以及

y-z

平面上的视野。

如果只给了一个视野,

可以通过投影平面的宽高比计算出来:

 

用一个视野算出

w

或者

h

,然后用宽高比算出

h

或者

w

2

)一般情况的方程

 

这组方程比较繁琐,但更具一般性(和

OpenGL

一般矩阵的推导一致,这也是

D3DXMatrixPerspectiveOffCenterLH

D3DXMatrixPerspectiveOffCenterRH

个方法所使用的情况)。我们导出它:

 

我们继续反推出透视投影矩阵:

 

其中

 

最后那个矩阵就是

D3D

的一般透视投影矩阵。

好了,

目前为止,

我们已经导出了

D3D

的两个透视投影矩阵。

下面我把上一篇导

出的

OpenGL

的透视投影矩阵写出来,大家可以拿它和刚刚导出的

D3D

的一般性

透视投影矩阵做一个对比。

 

如果仔细观察,

可以发现二者在元素的布局上是一个转置的关系,

这个就是由它

们使用的左右手坐标系以及使用的行列矩阵的差异造成的。

而另外在一些元素的

细节上也存在着差异,

这是由于

D3D

CVV

z

范围不同造成的。

可见在原理相

同的情况下,

细微的环境差异可以造成非常大的变化,

而这就是透视投影矩阵存

在诸多不同版本的原因。一般情况的透视投影矩阵也可以使用视野方式来定义,

方法和特殊情况相同。

M3G

的透视投影矩阵

M3G

是对

OpenGL

进行的一个封装,

它的透视投影变换矩阵被放到了类

Camera

面。

因为它封装了

OpenGL

因此环境和

OpenGL

相同:

右手坐标系、

列向量乘法、

CVV

范围

[-1

1]

。它唯一和

OpenGL

有些差异的地方就在于它只使用投影平面

的中心和

x-y

平面的中心重合

(在

x

y

方向上都居中)

的情况

(就是我们上面

D3D

的第一种特殊情况)。我们用

OpenGL

透视投影矩阵最终版本来说明(再次

提醒,如果读者对此感到迷惑,请参考第一篇文章):

 

上面是

OpenGL

透视投影矩阵的最终版本,也是一般性版本,我们要把它变成特

殊性,版本,非常简单,和上面

D3D

的特殊情况一样,我们从对

x

y

进行插值

的那一步来看:

 

D3D

的第一种情况一样,销掉两边的

1/2

,得到:

 

则我们反推出透视投影矩阵:

 

最右边那个矩阵就是

M3G

的透视投影矩阵。

仍然可以通过视野参数来设置透视投

影矩阵,这里请读者自行推导,方法与上面

D3D

的完全相同

IOS 透​视​投​影​矩​阵​推​导(转)的更多相关文章

  1. iOS开发三步搞定百度推送

    iOS开发三步搞定百度推送   百度推送很简单,准备工作:在百度云推送平台注册应用,上传证书. 步骤一: 百度云推送平台 http://push.baidu.com/sdk/push_client_s ...

  2. ios屏幕怎么投屏到电脑显示器

    iphone在国内一直都很受欢迎,为什么这么受欢迎呢?其实苹果手机操作系统非常的新颖,让人对手机有了重新的认识.但是ios屏幕怎么投屏到电脑显示器.感兴趣的一起阅读下面的内容吧! 使用工具: 苹果手机 ...

  3. IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送

    摘要 在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置a ...

  4. 【转】IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送

    在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置appl ...

  5. iOS 点击Application icon加载推送通知Data

    今天做APNS远程推送通知遇到了一个问题,就是手机接收到通知的时候,如果马上点击通知的 alert view时候,系统马上唤醒你的Application,通知或调用你的didReceiveLocalN ...

  6. iOS - Push 通知推送

    1.UserNotifications 通知是 App 用来和用户交流的一种方式,特别是当 App 并没有在前台运行的时候.通知,正如它的名称所强调的,被用作向用户'通知'一个事件,或者仅仅向用户提示 ...

  7. IOS开发之实现App消息推送

    转自:http://blog.csdn.net/shenjie12345678/article/details/41120637 第一部分 首先第一步当然是介绍一下苹果的推送机制(APNS)咯(ps: ...

  8. Android、iOS和Windows Phone中的推送技术

    推送并不是什么新技术,这种技术在互联网时代就已经很流行了.只是随着进入移动互联网时代,推送技术显得更加重要.因为在智能手机中,推送从某种程度上,可以取代使用多年的短信,而且与短信相比,还可以向用户展示 ...

  9. IOS开发之实现App消息推送(最新)

    好久没有写过博客啦,今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多 ...

随机推荐

  1. 【VMware虚拟化解决方案】设计和配置VMware vCenter 5.5

    在这之前,我们已经对VMware ESXi 5.5进行了整个环境的设计和规划,虽然安装VMware ESXi 5.5在CPU的选型.网络的设计.共享存储的方式.虚拟化资源的需求和安装ESXI的模式等一 ...

  2. Quartz Scheduler(2.2.1) - hello world

    简单示例 1. maven 依赖 <dependencies> <dependency> <groupId>org.quartz-scheduler</gro ...

  3. Ehcache(2.9.x) - API Developer Guide, Cache Exception Handlers

    About Exception Handlers By default, most cache operations will propagate a runtime CacheException o ...

  4. jQuery之手势密码

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. JAVA输入/输出系统中的其他流学习笔记

    一.字节数组流 字节数组流类能够操作内存中的字节数组,它的数据是一个字节数组.字节数组流类本身适配器设计模式,它把字节数组类型转为流类型使得程序能够对字节数组进行读写操作. 1.ByteArrayIn ...

  6. 那万恶的ssh真是麻烦

    设置为允许某组远程ssh ,key也放入相应的服务器了,死活提示,Permission denied (publickey). 而偏偏另外的用户相同的配置却又可以,这里找到答案,原来是跟目录的权限有关 ...

  7. 动态加载JS代码

    到处查资料研究js动态脚本的加载,找到以下7种方法,总有一种适合你! 首先我们需要一个被加载的js文件,我在一个固定文件夹下创建了一个package.js,打开后在里面写一个方法functionOne ...

  8. [求助]谁能给我讲解一下,iOS编程要如何实时显示采集到的图像???

    rt,最近搞一个高清图传,本着自(bu)主(mai)创(da)新(jiang)的原则,打算利用手中的iPad当作辅助飞行屏幕,USB传输数据.再说某疆图传7999(还只支持自家云台录像拍照),哪是我这 ...

  9. OpenGL3-绘制各种图元绘制

    代码下载 #include "CELLWinApp.hpp"#include <gl/GLU.h>#include <assert.h>#include & ...

  10. win7下64位系统memcache/memcached安装教程

    折腾了1个多小时,终于搞定.操作系统时64位的,php5.3.13 类似于上一篇的xdebug安装教程~~ memcache和memcached的区别  在自己的新程序中打算全面应用memcached ...