这里我们将加入纹理来代替颜色设置不同表面的内容,和上一课不同的地方是在Polygon类中加入了一些纹理的设置,下面将一一描述,代码如下:

public class Polygon {// 保存纹理的FloatBufferprivate FloatBuffer[] textureBuffer;// 用来加载纹理的数组private int[] textures = new int[8];// 保存纹理顶点坐标的数组private float[][] texture = {new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 1.0f, 0.5f, 0.0f,1.0f, 1.0f, 1.0f,},new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 1.0f, 0.5f, 0.0f,1.0f, 1.0f, 1.0f,}, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,}, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,}, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,}, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,}, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,}, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,} };public Polygon() {ByteBuffer bb;// 初始化保存纹理的FloatBuffertextureBuffer = new FloatBuffer[8];for (int i = 0; i < 8; i++) {bb = ByteBuffer.allocateDirect(texture[i].length * 4);bb.order(ByteOrder.nativeOrder());textureBuffer[i] = bb.asFloatBuffer();textureBuffer[i].put(texture[i]);textureBuffer[i].position(0);}}public void draw(GL10 gl) {gl.glFrontFace(GL10.GL_CW);for (int i = 0; i < 8; i++) {// Generate one texture pointer...// ...and bind it to our array// 生成一个纹理引用,并把它和当前的数组绑定gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);// Point to our buffers// 设置纹理坐标gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer[i]);// Enable the texture state// 加入纹理坐标的权限gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);// Disable the client state before leaving// 取消纹理坐标的权限gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);}}// 加载和绑定纹理的方法public void loadTexture(GL10 gl, Context context) {// define the resourcesId int[] resourcesIds = { R.drawable.gou, R.drawable.hou, R.drawable.laohu, R.drawable.laoshu, R.drawable.tuzi, R.drawable.xiaolong, R.drawable.xiaoniu, R.drawable.zhu };gl.glGenTextures(8, textures, 0);// Get the texture from the Android resource directoryfor (int i = 0; i < 8; i++) {Bitmap bitmap = loadBitmap(context, resourcesIds[i]);// Generate one texture pointer...// ...and bind it to our arraygl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);// Create Nearest Filtered Texturegl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_LINEAR);// Use the Android GLUtils to specify a two-dimensional texture// image from our bitmapGLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);// Clean upbitmap.recycle();}}// 加载bitmappublic Bitmap loadBitmap(Context context, int resourceid) {InputStream is = context.getResources().openRawResource(resourceid);try {// BitmapFactory is an Android graphics utility for imagesreturn BitmapFactory.decodeStream(is);} finally {// Always clear and closetry {is.close();is = null;} catch (IOException e) {}}}}


可以到网上找一些256x256的图片代替文中的图片资源。

更多相关文章

  1. 编写高效Android代码
  2. Android(安卓)JNI编程学习
  3. 解决android客户端上传图片到服务端时,图片损坏的问题
  4. Android(安卓)RenderScript 使用 Struct 及其下标的赋值
  5. 【Android】OpenGL ES---绘制3D图形、应用纹理贴图
  6. Android(安卓)8.1隐藏状态栏图标的实例代码
  7. Android(安卓)关于JSON封装
  8. OpenGL ES 2.0 Shader总结
  9. 当android里一堆button,用数组来循环建立并且操作每个button

随机推荐

  1. Android(安卓)aapt实现资源分区(补充携程a
  2. Android图形显示系统——下层显示4:图层合
  3. 分享几点Android(安卓)开发中的小技巧吧
  4. Android学习路线(二十五)全面理解Android(
  5. 个人认为安卓开发前景
  6. Android(安卓)里的Intent是什么意思
  7. Android(安卓)NDK入门
  8. Android性能测试 一些适用于Android(安卓
  9. Android开发实践:利用ProGuard进行代码混
  10. Android中的签名验证(1)