关于OpenGL模型视图矩阵的研究
2012-03-24 09:37
141 查看
在OpenGL中,矩阵的逻辑形式:
在模型视图矩阵中使用列向量来表示转换后的坐标系,
使用右乘列向量来完成对点的变换。
在OpenGL中,矩阵的物理形式:
使用连续的储存单元储存一列,(即v[0],v[1],v[2]表示m11,m21,m31)
我们可以“错误”地认为OpenGL矩阵的逻辑形式为行向量,并且“错误”地认为物理方式为连续单元保存一行。
这样经过两次错误地认为,可以使我们使用行向量来分析问题,并可以直接用于OpenGL。
以下分析都是使用错误地认为。
在OpenGL中的变换函数:
glTranslatef()
glRotatef()
glScalef()
先调用的变换操作反而后变换,
即使用与函数对应的变换矩阵右乘已存在的变换矩阵(模型视图矩阵)(这里已经在使用错误的假设来分析问题了),
这样做是必须的,且非常的有意义。
模型试图矩阵到底是什么?
实际上模型视图矩阵是模型矩阵和视图矩阵相乘得到的单一矩阵(M*V),
我们说gluLookAt()会影响视图矩阵,其实也就是影响模型视图矩阵。
函数gluLookAt()大致原理:
在模型视图矩阵中使用列向量来表示转换后的坐标系,
使用右乘列向量来完成对点的变换。
在OpenGL中,矩阵的物理形式:
使用连续的储存单元储存一列,(即v[0],v[1],v[2]表示m11,m21,m31)
我们可以“错误”地认为OpenGL矩阵的逻辑形式为行向量,并且“错误”地认为物理方式为连续单元保存一行。
这样经过两次错误地认为,可以使我们使用行向量来分析问题,并可以直接用于OpenGL。
以下分析都是使用错误地认为。
在OpenGL中的变换函数:
glTranslatef()
glRotatef()
glScalef()
先调用的变换操作反而后变换,
即使用与函数对应的变换矩阵右乘已存在的变换矩阵(模型视图矩阵)(这里已经在使用错误的假设来分析问题了),
这样做是必须的,且非常的有意义。
模型试图矩阵到底是什么?
实际上模型视图矩阵是模型矩阵和视图矩阵相乘得到的单一矩阵(M*V),
我们说gluLookAt()会影响视图矩阵,其实也就是影响模型视图矩阵。
函数gluLookAt()大致原理:
/* // 返回一个 "lookat" 四维矩阵 通过当前摄像机的位置(pos)、目标(target)、up // 这个是一个容易理解的函数 matrix44_t LookAtMatrix44(const vector3_t &camPos, const vector3_t &target, const vector3_t &camUp) { matrix33_t rot; //表示一个旋转(正交阵) vector3_t z = camPos - target; z.normalize(); vector3_t x = camUp * z; x.normalize(); vector3_t y = z * x; rot.assign(x,y,z); //注意这里是想x,y,z三个向量 rot.transpose(); //转置(逆阵) matrix44_t temp; //表示一个位移矩阵 temp.identity(); temp.r3 = -camPos; return temp * rot; //先进行位移在进行旋转 }*/ // 优化过的 LookAtMatrix44 matrix44_t LookAtMatrix44(const vector3_t &pos, const vector3_t &target, const vector3_t &up) { matrix44_t ret; vector3_t z = pos - target; z.normalize(); vector3_t x = up * z; x.normalize(); vector3_t y = z * x; ret.identity(); //单位化矩阵 ret.r0.assign(x.x,y.x,z.x);//ret.r03 = 0.0f; ret.r1.assign(x.y,y.y,z.y);//ret.r13 = 0.0f; ret.r2.assign(x.z,y.z,z.z);//ret.r23 = 0.0f; ret.r3.x = - DotProduct(pos,x); ret.r3.y = - DotProduct(pos,y); ret.r3.z = - DotProduct(pos,z); // ret.m33 = 1.0f; return ret; }
相关文章推荐
- OpenGL中查询模型视图(Model View)矩阵中的数据
- 关于OpenGL中模型视图投影视口变换的理解
- 一、OpenGL灯光位置的控制 -- 模型视图矩阵的本质
- opengl 关于 投影变换,模型视图变换,视口变换 和多视口 的综合例子
- OpenGL 模型视图投影矩阵 仿射矩阵
- OpenGL(五) 三维变换之模型视图矩阵
- OpenGL矩阵推导——模型视图变化(转载需写明作者)
- opengl入门系列2- 模型视图矩阵变换
- OpenGL 入门教程(五) -- 模型视图投影矩阵
- OpenGL矩阵推导——模型视图变化
- OpenGL(五) 三维变换之模型视图矩阵
- OpenGL: 模型视图矩阵变换
- 小白学opengl之 获取模型视图矩阵和投影矩阵
- 理解OpenGL中的模型视图矩阵变换
- OpenGL 入门教程 模型视图投影矩阵 变换光线
- OpenGL矩阵推导——模型视图变化
- 关于模型视图矩阵的相机
- OpenGL.ES在Android上的简单实践:8-曲棍球(构建冰球木槌 下 & 模型视图投影矩阵)
- 【LWJGL2 WIKI】【现代OpenGL篇】用投影、视图、模型矩阵画方形
- openGL中根据读取的数据,确定投影矩阵和模型视图矩阵