zoukankan      html  css  js  c++  java
  • IOS 透​视​投​影​矩​阵​推​导(转)

     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

    的完全相同

  • 相关阅读:
    yii 引入文件
    CodeForces 621C Wet Shark and Flowers
    面试题题解
    POJ 2251 Dungeon Master
    HDU 5935 Car(模拟)
    HDU 5938 Four Operations(暴力枚举)
    CodeForces 722C Destroying Array(并查集)
    HDU 5547 Sudoku(dfs)
    HDU 5583 Kingdom of Black and White(模拟)
    HDU 5512 Pagodas(等差数列)
  • 原文地址:https://www.cnblogs.com/lingzeng/p/3893403.html
Copyright © 2011-2022 走看看