Android中使用opengl es2.0基础(3)-正方体绘制
在三角形绘制的基础上,进行正方体的绘制,同时对正方体进行纹理贴图,透视投影的设置。
1.设置正方体顶点坐标:
//正方体顶点坐标
private float[] coords = { -s,s,-s,s,s,s,s,s,-s, //023 -s,s,-s,-s,s,s,s,s,s, //012 -s,s,s,-s,-s,s,s,s,s, //152 s,s,s,-s,-s,s,s,-s,s, //256 s,s,s,s,-s,s,s,-s,-s, //267 s,s,s,s,-s,-s,s,s,-s, //273 s,s,-s,s,-s,-s,-s,-s,-s, //374 s,s,-s,-s,-s,-s,-s,s,-s, //340 -s,s,-s,-s,-s,-s,-s,s,s, //041 -s,s,s,-s,-s,-s,-s,-s,s, //145 -s,-s,s,-s,-s,-s,s,-s,s, //546 s,-s,s,-s,-s,-s,s,-s,-s //647 };private float s = 0.8f;
2. 纹理贴图需要先知道纹理贴图的坐标系,以图片的左下角为原点,如下:
设置纹理坐标:
//纹理坐标 private float[] textureCoord = { 0,1,1,0,1,1, 0,1,0,0,1,0, 0,1,0,0,1,1, 1,1,0,0,1,0, 0,1,0,0,1,0, 0,1,1,0,1,1, 0,1,0,0,1,0, 0,1,1,0,1,1, 0,1,0,0,1,1, 1,1,0,0,1,0, 0,1,0,0,1,1, 1,1,0,0,1,0 };
加载纹理贴图://加载纹理贴图 texture = TextureUtil.loadTexture(view.getContext(), R.mipmap.ic_launcher);
public static int loadTexture(Context context, int resourceId) { //textureObjectIds用于存储OpenGL生成纹理对象的id final int[] textureObjectIds = new int[1]; //1代表生成一个纹理 GLES20.glGenTextures(1, textureObjectIds, 0); //判断是否生成成功 if(textureObjectIds[0] == 0) { Log.e(TAG, "生产纹理对象失败!"); return 0; } //加载纹理资源,解码成bitmap形式 final BitmapFactory.Options options = new BitmapFactory.Options(); options.inScaled = false; final Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId, options); if (bitmap == null) { Log.e(TAG, "Resource ID: " + resourceId + " decoded failed"); //删除指定的纹理对象 GLES20.glDeleteTextures(1,textureObjectIds, 0); return 0; } //第一个参数代表这是一个2D纹理,第二个参数就是OpenGL要绑定的纹理对象ID,也就是让OpenGL后面的纹理调用都使用此纹理对象 GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture