zoukankan      html  css  js  c++  java
  • 视图矩阵的推导-opengl应用

    把物体从世界坐标系转化到视点坐标系的矩阵称为视图矩阵。

         下面我们先看下opengl视图矩阵的推导过程:

         假设视点或camera的局部坐标系为UVN,UVN分别指向右方、上方和后方从而构成右手坐标系,视点则处于局部坐标系的原点位置。

         就如opengl的函数OpenGL的gluLookAt(eyex, eyey, eyez, lookatx, lookaty, lookatz, upx, upy, upz)一样,给定视点、观察点、以及up向量,现在我们来求得视图矩阵。

    1、首先我们来求得N = eye – lookat,并把N归一化。

    2、up和N差积得到U, U= up X N,归一化U。

    3、然后N和U差积得到V

       

    image

          假设视点坐标系初始和世界坐标系重合,它先进行一个旋转变化,然后再进行一个平移,得到现在是视点位置和方位。则此时进行的矩阵变化为image,其中T是平移变化,R是旋转变化,而相机变换是相机本身变换的逆变换。

    image

    T的逆矩阵为:

    image

         当相机变换进行完Inverse Translation这一步之后,相机的原点和世界原点就重合了,也就是处理完了关于平移的变换。

         我们要把一个世界坐标系点K(Kx, Ky, Kz),表示成(U,V,P)坐标系的点(假设此时,已经经过平移操作,摄像机在世界坐标系的原点),则其公式为:

    Lx = Kx * Ux + Ky * Uy + Kz * Uz;

    Ly = Kx * Vx + Ky * Vy + Kz * Vz;

    Lz = Kx * Px + Ky * Py + Kz * Pz

    则转化矩阵为(opengl使用列向量,右乘)

    image

    则完整的公式为:image

          以上是opengl的视图矩阵,对于d3d,由于使用行向量,左乘,以及左手坐标系,所以视图稍有不同,在D3D11教程中,曾加做过推导:

    http://www.cnblogs.com/mikewolf2002/archive/2012/03/11/2390669.html

    http://www.cnblogs.com/mikewolf2002/archive/2012/11/25/2787636.html

  • 相关阅读:
    博弈论基础与习题(未完)
    三视图求最多方块数
    二维前缀和应用
    卡特兰数
    UVa 11806 Cheerleaders(容斥定理)
    逃出升天
    求排列的逆序数
    求2进制下1的个数
    字符串哈希基础与应用
    网络流基础与应用
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/3790199.html
Copyright © 2011-2022 走看看