在OpenGL ES中绘制一张图片需要使用到纹悝(texture)绘制纹理步骤如下:
绘制纹理的shader需要顶点数据、纹理顶点数据和纹理。Vertex Shader代码如下:
创建program并获取参数句柄
创建program的过程在《OpenGL ES for Android 环境搭建》中详细介绍这里不在介绍,直接使用封装好的工具类代码如下:
创建全屏的顶点数据代码如下:
这里有4个点,每个点包含3个float数据玳表x,y,z。4个顶点的位置如下图:
OpenGL ES中绘制任何形状都是通过绘制多个三角形而组成所以我们将这4个点分为2个三角形,分布为(V1,V2,V3)和(V1,V3,V4)因此定义三角形索引数组代码如下:
将索引数组转为buffer,我们也将此方法封装在工具类里面代码如下:
纹理坐标的原点是左上角,右下角是(11),将整张图片绘制的纹理顶点数据代码如下:
纹理坐标的顶点顺序不是随便定义的要与定义的顶点数据一一对应,否则可能出现紋理错乱对应顺序如下图:
如果将纹理顶点设置如下:
纹理将逆时针旋转90度,通过此方法可以旋转、镜像纹理但我们一般不会使用此方法旋转、镜像纹理,可以通过OpenGL ES中著名的MVP矩阵进行此操作
纹理的的来源是一张图片,将图片转为Bitmap代码如下:
创建2D纹理id,代码如下(此方法将封装在工具类中):
count:生成纹理的个数
array:生成纹理id存放的数组。
offset:存放纹理id数组的偏移
纹理创建成功后返回纹理id,将Bitmap传递给此纹理代码如下:
GLUtils是系统工具类,并不是我们自己写的工具类
count:顶点的个数
到此绘制纹理就完成了。