OpenGL: 视图矩阵的推导

转载 2015年07月07日 21:17:01

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

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

OpenGL: 视图矩阵的推导

把物体从世界坐标系转化到视点坐标系的矩阵称为视图矩阵。     下面我们先看下opengl视图矩阵的推导过程:     假设视点或camera的局部坐标系为UVN,UVN分别指向右方、上方和后方从而构...
  • Augusdi
  • Augusdi
  • 2014年03月04日 11:08
  • 6025

OpenGL矩阵推导——模型视图变化(转载需写明作者)

OpenGL矩阵推导——模型视图变化 在三维编程中,模型视图变换是从三维世界到二维屏幕中一个很重要的变换,但是这个变换往往很多人都不太理解,要么是事而非。而这方面的文章不是太少就是讲的太浅没有真正的...
  • yanwei2016
  • yanwei2016
  • 2012年03月06日 20:00
  • 5631

理解OpenGL中的模型视图矩阵变换

对于学习OpenGL,或者其他的API,基础的矩阵变换是最重要的。矩阵变换是重中之重。下面就拿红皮书上的最简单的demo:cube.c来说。调用函数 glMatrixMode (GL_MODELVIE...
  • dizuo
  • dizuo
  • 2008年04月17日 22:28
  • 9573

OpenGL ES 模型视图矩阵操作

对当前模型视图进行缩放,在OpenGL ES 1.0中可以使用glScale*函数,而在2.0中需要自己设置缩放矩阵。        如,分别使用sx,sy,sz表示在x,y,z轴上的缩放比例,...
  • u014538198
  • u014538198
  • 2015年11月15日 11:27
  • 738

OpenGL取景变换(视图变换)矩阵推导

OpenGL取景变换(视图变换)矩阵推导标签(空格分隔): OpenGL VR 游戏开发前言关于取景变换(视图变换)矩阵的推导本人查过许多资料, 包过关于openGL的和数学方面, 数学方面的资料很严...
  • yanquan345
  • yanquan345
  • 2017年02月13日 15:11
  • 602

小白学opengl之 获取模型视图矩阵和投影矩阵

#include #include #include #include #include using namespace std; static int shoulder=0,elbow...
  • yangkaikwill
  • yangkaikwill
  • 2014年11月28日 00:28
  • 1146

OpenGL(五) 三维变换之模型视图矩阵

计算机三维图形学中,一个基本的任务是如何描述三维空间中一个物体位置的变化,也就是如何 描述物体的运动。通常情况下,物体位置的变化包含三个基本的变化:平移、旋转和缩放,物体的运动也可以用这三个基本的运动...
  • dcrmg
  • dcrmg
  • 2016年11月08日 23:14
  • 2429

openGL中根据读取的数据,确定投影矩阵和模型视图矩阵

openGL中根据读取的数据,确定投影矩阵和模型视图矩阵 1 问题描述 一开始假设我们已经读入了一系列三维坐标点数据。我们的目的是通过确定openGL的投影和模型视图矩阵,从而能在窗口中居中显示这...
  • ly20056402006
  • ly20056402006
  • 2016年01月23日 15:09
  • 838

视图模型转换矩阵的推导也是关于gluLookAt函数即视图转换矩阵的推导及代码实现

关于gluLookAt函数即视图转换矩阵的推导及代码实现 视图模型转换矩阵的推导也是关于gluLookAt函数即视图转换矩阵的推导及代码实现   gluLookAt函数提供给用户完成模式变换(mo...
  • Liuchuang_MFC
  • Liuchuang_MFC
  • 2015年11月06日 23:45
  • 2076

视图矩阵推导

转自:http://hanwei0143.blog.163.com/blog/static/519269932007112591355562/   3D图形的渲染中数据处理主要是按照这样流程处理:...
  • Magina3
  • Magina3
  • 2011年11月06日 22:27
  • 1395
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL: 视图矩阵的推导
举报原因:
原因补充:

(最多只允许输入30个字)