【我的Android进阶之旅】关于OpenGL ES 2.0 中 Matrix.setLookAtM()参数的详细解说

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        //计算宽高比
        float ratio=(float)width/height;
        //设置透视投影
        Matrix.frustumM(mProjectMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
        //设置相机位置
        //eyex,eyey,eyez 代表相机在坐标轴的位置,centerX,centerY,centerZ代表物体的中心坐标,upX,upY,upZ代表相机往哪边看
        Matrix.setLookAtM(mViewMatrix, 0, 0, 0, 7.0f, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
        //计算变换矩阵
        Matrix.multiplyMM(mMVPMatrix,0,mProjectMatrix,0,mViewMatrix,0);
    }

我们首先查看下setLookAtM方法的参数


坐标系图
【我的Android进阶之旅】关于OpenGL ES 2.0 中 Matrix.setLookAtM()参数的详细解说

  第一类    相机的坐标      eyex,eyey,eyez
就是照相机在上图坐标系的位置

第二类    目标的位置      centerX,centerY,centerZ
就是图标在上图的位置(注意:9个数据是存在同一个空间坐标之中的)

第三类   相机的视觉向量    upx,upy,upz
      也就是相机的方向。。。。。。这个需要大家理解一个知识。。叫做向量
      向量。。就是有方向的量。。。。它有三个属性。。第一个就是起始点。。第二个方向。。 第三个就是量

就这里而言,起始点就是照相机,方向,,是由upx,upy,upz三个数据分别指向3个方向,,然后 合成所形成的方向


理解起来比较复杂。。那我们看图
【我的Android进阶之旅】关于OpenGL ES 2.0 中 Matrix.setLookAtM()参数的详细解说
总的来说,由三部分决定相机的视觉
【我的Android进阶之旅】关于OpenGL ES 2.0 中 Matrix.setLookAtM()参数的详细解说
相机的向量很容易理解。。。。例如。。。
1.相机就在Z轴上也就是,坐标0,0,3
2.目标就是远点,坐标0,0,0
3,现在向量upy=1.其他为0,,其实就表示着,相机对着XY所形成平面,正对着Y轴(注意。。这时候。。其实是没有X轴的。。。其实所存在的。。。只有YZ坐标系,看的时候,注意排除X轴,不然容易混乱)
同样的,如果UPX=1,UPY=0,upz=0,那么。。就排除Y轴,在Z轴上看X轴,,

二者所看到的图像方向是不一样的。
好吧。。。我们再用图说话
【我的Android进阶之旅】关于OpenGL ES 2.0 中 Matrix.setLookAtM()参数的详细解说
第一种情况、、、向量为0,1,0
你看到的应该是N
第二种情况、、、向量为1,0,0
你看到的应该是Z


说了这么多。。其实还是应该拿事物自己比划一下,这样才能加深理解