两种投影方式
我们知道,在图元装配之后的光栅化阶段前,首先需要把虚拟3D世界的物体投影到二维平面上。OpenGL ES中常用的投影模式有两种,分别是正交投影与透视投影:
正交投影
OpenGL ES 2.0中,根据应用程序提供的投影矩阵,管线会确定一个可视空间区域,称之为视景体。视景体是由6个平面确定的,这6个平面分别为:上平面(up),下平面(down),做平面(left),右平面(right),远平面(far),近平面(near)。
场景中处于视景体内的物体会被投影到近平面上(视景体外的物体将被裁剪掉),然后再将近平面上投影出的内容映射到屏幕上的视口中。
对于正交投影而言,视景体及近平面的情况如图:
我们可以看到,正交投影是平行投影的一种,其视景体是长方体,投影到近平面上的图形不会产生“近大远小”的效果。
我们可以这样来进行正交投影的设置:
Matrix.orthoM(
mProjectMatirx, //投影矩阵
0, //偏移量
left,right,//near面的left,right
bottom,top,//near面的bottom,top
near,far//near面,far面与视点的距离
);
透视投影
现实世界中,人眼观察物体时会有“近大远小”的效果,这种效果,是不能用正交投影来实现的,可以采用透视投影。透视投影的投影线是不平行的,他们相交于视点。
我们可以看到,透视投影的投影线互不平行,都相交于视点。因此同样尺寸大小的物体,近处的投影出来大,远处的投影出来小,从而产生了“近大远小”的效果。
我们可以这样来进行透视投影的设置:
Matrix.frustumM(
mProjectMatirx, //投影矩阵
0, //