有趣的各种投影方式

  • 摄像机的设置

若摄像机位置、姿态不同,对同一场景进行拍摄,得到的画面也是迥然不同的。

可通过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方法来完成对正交投影的设置。
 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类的orthoM方法来完成对正交投影的设置。
 Matrix.frustumM(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面与视点的距离;
一般情况下,应该保证近平面的宽高比与视口的宽高比相同,否则显示在屏幕上的图像会拉伸变形。
-------------------------------------------------------------------------------------------------------------------

一般情况下,应该保证近平面的宽高比与视口的宽高比相同,否则显示在屏幕上的图像会拉伸变形。

-------------------------------------------------------------------------------------------------------------------

  • 各种变换
变换有三种基本变换,分别是平移、旋转、缩放


currMatrix是当前变换矩阵

一、平移 

Matrix.translateM(currMatrix, 0, x, y, z);
沿x轴方向平移x,沿y方向平移y,沿z方向平移z

二、旋转 

Matrix.rotateM(currMatrix, 0,angle, x, y, z);
绕与x,y,z方向相同的轴旋转angle度

三、缩放 

Matrix.scaleM(currMatrix, 0, x, y, z);
沿x轴方向按x倍缩放,沿y轴方向按y倍缩放,沿z轴方向按z倍缩放


你可能感兴趣的:(有趣的各种投影方式)