OpenGL ES矩阵变换及其数学原理详解(五)

  

<强>引子

  
      <李>向量刻画的是线性空间中的对象。   <李>矩阵刻画的是向量在线性空间中的运动(变换,跃迁),相似矩阵本质上就是同一个线性变换的不同的描述。   <李>在一个线性空间中,选定了一组基,对于任何一个线性变化都可以用一个确定的矩阵来描述李   <李>矩阵不仅可以作为线性变换的描述,而且可以作为一组基的描述,作为变换的矩阵,不但可以把线性空间中的一个点给变换到另一个点去,而且也能够把线性空间中的一个坐标系(基)表换到另一个坐标系(基)去。   <李>当我们谈到向量时,一定要指定它所在的坐标系才有意义,比如向量b=(1、2、3)实际上指的是在单位坐标系我下有一个向量的度量为b。   <李>就可以理解马=b就可以看成马=Ib,就是说在坐标系米中度量出来的向量一个和在坐标系我里面度量出来的b实际上就是同一个向量。   <李>对于矩阵而言,他表示出来的那个坐标系也是由一组基(向量)组成的,同样存在这组基实在哪个坐标系下度量的问题。对于矩阵M,将其理解成IM,即M中的那组向量是在我坐标系中得出的。   <李>麦根本质是声明了一个在M坐标系中量出的另一个坐标系N,其中M本身是在我坐标系中度量出来的。   <李>对坐标系施加变换的方法,就是让表示那个坐标系的矩阵与表示那个变化的矩阵相乘。
      李   
  

因此我们来理解这样一个式子,ACb, AC为矩阵,b为一个向量

  
      <李> b是一个向量,他是在我坐标系下度量的,a=Cb也就是在我坐标系下将向量b变换到向量b, d=ACb=Aa的含义就是继续在我坐标系下将向量一个变换到向量d。即在同一个坐标系我下面进行了两次变换操作。   <李>另一种理解方式是ACb=IACb,那么IAC三个矩阵相乘就表示了坐标系的变换,在我坐标系中度量处新的坐标系IA,再在IA坐标系下度量出IAC,然后这里最终的坐标系中的向量b和在1中在我坐标系中经过两次变换得到的向量是同一个向量。   
  

上面的两种理解方式也揭示了对向量的变换和对坐标系的变换是等价的,这一点也可以通过后面旋转变换的图示中看出来。

  

<强>各种变换

  

  

 OpenGL ES矩阵变换及其数学原理详解(五)

  

  

 OpenGL ES矩阵变换及其数学原理详解(五)

  

平移矩阵和缩放矩阵很容易理解,并且从矩阵形式我们也可以看到为什么用四维的向量表示一个顶点了,除了w分量用来做透视除法以外,另一个作用不也正好是为了把平移整合进来吗,都做乘法而不做加法。在数学上也就是将三维空间的坐标表示成其齐次形式。
  

  

  

旋转变换相对来说较为复杂,对绕x, y或z轴旋转的情况比较好理解。
  

  

 OpenGL ES矩阵变换及其数学原理详解(五)

  

以绕z轴旋转为例

  

 OpenGL ES矩阵变换及其数学原理详解(五)
  

  

于是   

 OpenGL ES矩阵变换及其数学原理详解(五)

  

写成矩阵形式为

  

 OpenGL ES矩阵变换及其数学原理详解(五)

  

绕任意轴旋转的旋转矩阵为

  

 OpenGL ES矩阵变换及其数学原理详解(五)

  

同理,前面学到的正交投影矩阵,透视矩阵以及摄像机矩阵,本质上和上面的变换都是一样的。

  

前面可以看到一般传入渲染管线的是一个由摄像机矩阵,投影矩阵,变换矩阵相乘得到的总的变换矩阵,

  

在顶点着色器中一般是这样的形式

        gl_Position=uMVPMatrix * vec4(立场,1);      

上面的代码中的变量uMVPMatrix表示了模型(M),视图(V),投影(p)三中变换综合,

  

 OpenGL ES矩阵变换及其数学原理详解(五)

OpenGL ES矩阵变换及其数学原理详解(五)