博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS 透视投影矩阵推导(转)
阅读量:4951 次
发布时间:2019-06-11

本文共 1373 字,大约阅读时间需要 4 分钟。

 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

的完全相同

转载于:https://www.cnblogs.com/lingzeng/p/3893403.html

你可能感兴趣的文章
Spring context:property-placeholder 一些坑
查看>>
如何使用 adb 命令实现自动化测试
查看>>
中国剩余定理
查看>>
JS中this的详解及例子
查看>>
用Entity Framework 来创建MySql数据库和表结构
查看>>
TensorFlow随机值:tf.random_normal函数
查看>>
poj 1733 Parity game(种类并查集)
查看>>
SQL Server2008函数
查看>>
课堂随笔3月8日下午
查看>>
ORM之F查询和Q查询
查看>>
BIOS编程相关常用外设介绍
查看>>
springboot学习笔记:9.springboot+mybatis+通用mapper+多数据源
查看>>
NO 3 ,人生苦短,我学python之python 元祖tuple魔法
查看>>
Spring-Boot Banner
查看>>
876-链表的中间结点
查看>>
BZOJ 3781 莫队
查看>>
BZOJ 3674/BZOJ 3673 主席树
查看>>
JAVA的String类
查看>>
wtforms 简单使用
查看>>
flume介绍
查看>>