图形学中的各种矩阵变换:模型视图矩阵,投影矩阵,切线空间矩阵

        图形学中,场景模型渲染到屏幕主要包括以下流程:首先通过模型矩阵变换模型位位置朝向和大小,确定模型在世界坐标中的位置,然后通过视图矩阵将模型的世界坐标位置转换到视点坐标下,接着通过投影矩阵将视点坐标下的模型转换视口空间,最后将视口位置变换到屏幕位置上。此外,对于使用法线贴图的模型,还需要一个法线空间矩阵,来变换法线的朝向。

 模型视图矩阵

        模型视图矩阵包括模型矩阵和视图矩阵,模型矩阵将模型变换到世界坐标,视图矩阵将世界坐标下的物体坐标变换到视口坐标,这两个矩阵本质一样。老版本的opengl使用下面的代码实现视图矩阵。2.0以后的版本开始支持动态管线渲染,各种矩阵需要自己在程序中计算好传入道shader中,至于矩阵的旋转平移丶缩放丶矩阵的实现,请参https://blog.csdn.net/dcrmg/article/details/53088617

     glMatrixMode(GL_MODELVIEW)
     glLoadIdentity();
     glulookat();

 投影矩阵栈   

   投影矩阵栈,实现将视口坐标下的模型坐标投影到裁剪视口,老版本的opengl使用下面的代码实现投影矩阵,2.0以后的版本需要自己手动传入投影矩阵,投影矩阵的参数个实现参考https://www.cnblogs.com/wonderKK/p/5695116.html

   glMatrixMode(GL_PROGECTION)
   glLoadIdentity();
   glFrustum(); //gluperspective();或者glortho();

       此外,在实现平面投影阴影的过程中,需要对场景中物体先投影到平面再投影到视平面,此时可通过矩 阵相乘,再设一个投影矩阵来实现,平面阴影,glMulMatix()。通常的视景体裁剪为6个面,若想更多裁剪,可通过下面多设置几个裁剪面,投影矩阵还用于模板阴影等应用中。     

  glEnable(gl_CLIP_PLANE);
  glClipPlane()

切线空间矩阵

    游戏中经常使用法线贴图模拟模型细节,从bump到法线贴图,法线贴图保存不是模型空间中的法线,使用的时候需要将切线空间中的法线变换到模型空间才能使用,具体原理参考http://www.cnblogs.com/tekkaman/p/3992352.html

猜你喜欢

转载自blog.csdn.net/wang371372/article/details/49794041