若摄像机位置、姿态不同,对同一场景进行拍摄,得到的画面也是迥然不同的。
可通过Matrix类的setLookAtM方法来完成对摄像机的设置。
setLookAtM方法的功能为根据接收的9个摄像机相关参数产生摄像机的观察矩阵,并将矩阵的元素填充到指定数组中。
Matrix.setLookAtM(mVMatrix,0,cx,cy,cz,tx,ty,tz,upx,upy,upz);
mVMatrix :
存储生成矩阵元素的float[]类型数组
;
0 : 填充起始偏移量;
cx,cy,cz : 摄像机位置的x,y,z坐标;
tx,ty,tz : 观察目标点的x,y,z坐标;
有了位置和朝向,此时摄像机可以360度旋转,这时我们需要一个up方向,将摄像机固定在一个位置一个方向。
upx,upy,upz : up向量在x,y,z轴上的分量;
投影方式有两种,分别是正交投影和透视投影
-- 视景体 : OpenGL ES 2.0中,管线会确定的一个可视空间区域, 由 上平面(up), 下平面(down), 左平面(left), 右平面(right), 远平面(far), 近平面(near) 六个平面组成;
-- 视景体与投影 : 视景体内的物体会投影到近平面, 然后再将近平面上投影出的内容映射到屏幕上的视口中, 视景体之外的内容会被裁减掉, 例如眼睛看不到的范围就是处于视景体外即被裁减掉的;
Matrix.orthoM(mProjMatrix, 0, left, right, bottom, top, near, far);
mProjMatrix : 存储生成矩阵元素的float[]类型数组;
0 : 填充起始偏移量;
left, right : near面的left、right 对应的x坐标;
bottom, top : near面的bottom、top 对应的y坐标;
near, far : near面、far面与视点的距离; Matrix.frustumM(mProjMatrix, 0, left, right, bottom, top, near, far);
0 : 填充起始偏移量;
left, right : near面的left、right 对应的x坐标;
bottom, top : near面的bottom、top 对应的y坐标;
near, far : near面、far面与视点的距离;Matrix.translateM(currMatrix, 0, x, y, z);
Matrix.rotateM(currMatrix, 0,angle, x, y, z);
Matrix.scaleM(currMatrix, 0, x, y, z);