ModelView矩阵含义及说明

在opengl中,视图和模型变换是在一个矩阵中进行控制的,这个矩阵就是GL_MODELVIEW_MATRIX,可以使用glGetFloatv函数来获取这个矩阵,而我们所要使用glTranslate*, glRotate*,glScale* 等操作均最后反映到这个矩阵的变化中,所以了解这个矩阵的构造对于灵活运用OpenGL比较重要。
变换矩阵在内存中的存放方式如下:
m[0] m[4] m[ 8] m[12]
m[1] m[5] m[ 9] m[13]
m[2] m[6] m[10] m[14]
m[3] m[7] m[11] m[15]
以看出,OpenGL是以列序来存放这个矩阵的,位于矩阵上方的3*3矩阵是旋转矩阵,可以用来控制刚体的旋转和尺度变化,如下:
m[0] m[4] m[ 8] 
m[1] m[5] m[ 9]
m[2] m[6] m[10]
而右上角的3*1矩阵是用来控制刚体的平移的。就是m[12],m[13],m[14]这三个值,分别控制X,Y ,Z方向的平移。所有16个值组成一标准


当我们使用
glGetFloatv(GL_TRANSPOSE_MODELVIEW_MATRIX, &mat),才与上述规则相一致.

DirectXD3DXMatrixLookAtLH建立出的ViewMatrix(R, U, N),这里的R,U,N是列向量,ViewMatrix的第一列是R,第二列是U,第三列是N.

DirectX没有令人误导的列存储方式,生成的ViewMatrix确实符合这个数学标准.

 

OpenGL中能直接取到的是ModelViewMatrix,此矩阵将模型坐标从模型坐标系转换到镜头坐标系,ModelViewMatrix的逆矩阵可以将镜头坐标系下的坐标转换到模型坐标系.

一个典型的应用是:

已知在镜头坐标系下,镜头所在(0, 0, 0),则使用上述逆矩阵推算出镜头在模型坐标下的位置.注意要想推算镜头在世界坐标系下的位置,需要使用ViewMatrix的逆矩阵.

如果ModelMatrix为标准矩阵,则模型坐标系和世界坐标系重合,ModelViewMatrix矩阵是纯粹的ViewMatrix.

 

定理:若有一个以当前坐标系为数值参考,而定义的基(以标准数学形式给出)

           R

    (U ) R,U,N为行向量)矩阵将当前坐标系的点的坐标数值转换到新基的坐标系下的

        N       点的数值的齐次矩阵。
参考链接:http://www.cnblogs.com/txwd0033/archive/2009/09/25/1574087.html
              http://www.cnitblog.com/linghuye/archive/2007/04/29/26402.html

posted on 2012-11-06 14:53 cslover 阅读(1509) 评论(0)  编辑 收藏 引用 所属分类: OpenGL-DirectX


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜