IOS 透视投影矩阵推导(转)
http://wenku.baidu.com/link?url=wDkyQR9fDI_tZas1BlMRUnNNoKwiQDygltm2wWxRr_sDwcDB51_QCDfR4Gb5wYrIUZ_tYxpjhZcquYeBgOC2Ce5tH-I6npzKEqtHZ9zFNt7
这几个参量,也可以根据视野(
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 透视投影矩阵推导(转)的更多相关文章
- iOS开发三步搞定百度推送
iOS开发三步搞定百度推送 百度推送很简单,准备工作:在百度云推送平台注册应用,上传证书. 步骤一: 百度云推送平台 http://push.baidu.com/sdk/push_client_s ...
- ios屏幕怎么投屏到电脑显示器
iphone在国内一直都很受欢迎,为什么这么受欢迎呢?其实苹果手机操作系统非常的新颖,让人对手机有了重新的认识.但是ios屏幕怎么投屏到电脑显示器.感兴趣的一起阅读下面的内容吧! 使用工具: 苹果手机 ...
- IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送
摘要 在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置a ...
- 【转】IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送
在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置appl ...
- iOS 点击Application icon加载推送通知Data
今天做APNS远程推送通知遇到了一个问题,就是手机接收到通知的时候,如果马上点击通知的 alert view时候,系统马上唤醒你的Application,通知或调用你的didReceiveLocalN ...
- iOS - Push 通知推送
1.UserNotifications 通知是 App 用来和用户交流的一种方式,特别是当 App 并没有在前台运行的时候.通知,正如它的名称所强调的,被用作向用户'通知'一个事件,或者仅仅向用户提示 ...
- IOS开发之实现App消息推送
转自:http://blog.csdn.net/shenjie12345678/article/details/41120637 第一部分 首先第一步当然是介绍一下苹果的推送机制(APNS)咯(ps: ...
- Android、iOS和Windows Phone中的推送技术
推送并不是什么新技术,这种技术在互联网时代就已经很流行了.只是随着进入移动互联网时代,推送技术显得更加重要.因为在智能手机中,推送从某种程度上,可以取代使用多年的短信,而且与短信相比,还可以向用户展示 ...
- IOS开发之实现App消息推送(最新)
好久没有写过博客啦,今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多 ...
随机推荐
- SQL Server 在线进程分析处理
SQL Server 在线进程分析处理 前言 数据库在线进程处理在很多时候需要人为干预已达到预期管理目标,下面整理一下常用的在线进程管理方法,便于后续工作使用. 一.查看目标数据库在线进程,并杀死指定 ...
- Features for configuring JSON-to-Java mapping
Following on/off features are defined in DeserializationConfig.Feature (Jackson 1.x) or Deserializat ...
- 在web界面调用水晶报表导出文件时莫名错误
原因是水晶报表未破解版有字段限制,不能超过90(具体个数没仔细测)个字段. 建议那些select *的朋友检查一下字段个数
- JDBC之初识
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- ListView控件的用法
listView是一个可以用来显示视图列表的控件. 它使用适配器来为之提供数据和资源. ListView使用的基本步骤 得到ListView类型的对象mListView 生成适配器对象mListVie ...
- 第四篇、CocoaPods 镜像的更新 原来的淘宝镜像已经不再更新
在开发应用,我们常常使用cocoaPods来管理第三方框架,但是原来的淘宝的镜像不更新了 新的镜像地址:https://gems.ruby-china.org/
- 选用 get 与 post 的一些建议
1.http的请求方法:get post 2. get:会把请求的内容 放到链接地址里面(数据请求的时候 默认的是get请求) 例:www.baidu.com/user/login?userna ...
- css笔记——杂记
####文本框内阴影#### input[type=text], textarea, input[type=email], input[type=url]{ box-shadow: inset 2px ...
- 【转载】干货来袭!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载七)LAMP集成安装
学Linux做程序开发也好,做系统管理也好,做网络管理员也好,做系统运维也好,不会LAMP和LNMP,那就等于连皮毛都不会!本篇是文字版的LAMP集成安装,下次连载我们要介绍LNMP的文字版安装.有喜 ...
- Mysql数据表的操作
表的操作 前提:选择数据库 语法: use 数据库名; 1.创建数据表 语法: create table 表名( 字段1 字段类型 [附加属性], 字段2 字段类型 [附加属性], 字段3 字段类型 ...