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

    的完全相同

  • 相关阅读:
    OpenCV && C++ 01
    图像矩的理解
    Halcon Example
    LabVIEW
    Working Experience
    Working Experience
    Working Experience
    C++
    Trigger,Cursor
    Paging
  • 原文地址:https://www.cnblogs.com/lingzeng/p/3893403.html
Copyright © 2011-2022 走看看