码迷,mamicode.com
首页 > 其他好文 > 详细

视图矩阵的推导-opengl应用

时间:2014-06-18 22:20:48      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   com   width   

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

     下面我们先看下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

   

bubuko.com,布布扣

 

 

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

bubuko.com,布布扣

T的逆矩阵为:

bubuko.com,布布扣

     当相机变换进行完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使用列向量,右乘)

bubuko.com,布布扣

则完整的公式为:bubuko.com,布布扣

 

      以上是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

视图矩阵的推导-opengl应用,布布扣,bubuko.com

视图矩阵的推导-opengl应用

标签:style   blog   http   color   com   width   

原文地址:http://www.cnblogs.com/pengkunfan/p/3790199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!