木蚂蚁手机乐园首页

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4322|回复: 1

[UI开发] Android的OpenGL学习笔记(4)

[复制链接]

该用户从未签到

51

主题

1

帖子

317

积分

木蚂蚁小学三年级

地穴编织者

Rank: 3

积分
317
发表于 2011-3-13 21:37:48 | 显示全部楼层 |阅读模式
本帖最后由 煮咖啡 于 2011-3-13 21:39 编辑


Android的OpenGL学习笔记(4)

这次主要是给前几次笔记做出的三角形上色呵呵……

其实很简单,只需添加几句话就行了,主要变化在VortexRenderer.java代码中,现把代码贴出来:

  1.     package com.droidnova.android.games.vortex;  
  2.     import java.nio.ByteBuffer;  
  3.     import java.nio.ByteOrder;  
  4.     import java.nio.FloatBuffer;  
  5.     import java.nio.ShortBuffer;  
  6.     import javax.microedition.khronos.egl.EGLConfig;  
  7.     import javax.microedition.khronos.opengles.GL10;  
  8.     import android.opengl.GLSurfaceView;  
  9.     public
  10.     class VortexRenderer implements GLSurfaceView.Renderer {  
  11.         private
  12.     static
  13.     final String LOG_TAG = VortexRenderer.class.getSimpleName();  
  14.         private
  15.     float _red = 0f;  
  16.         private
  17.     float _green = 0f;  
  18.         private
  19.     float _blue = 0f;  
  20.         // a raw buffer to hold indices allowing a reuse of points.
  21.         private ShortBuffer _indexBuffer;  
  22.         // a raw buffer to hold the vertices
  23.         private FloatBuffer _vertexBuffer;  
  24.         // a raw buffer to hold the colors
  25.         private FloatBuffer _colorBuffer;  
  26.         private
  27.     short[] _indicesArray = {0, 1, 2};  
  28.         private
  29.     int _nrOfVertices = 3;  
  30.         private
  31.     float _angle;  
  32.         @Override
  33.         public
  34.     void onSurfaceCreated(GL10 gl, EGLConfig config) {  
  35.             // preparation
  36.             gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//允许设置顶点
  37.             gl.glEnableClientState(GL10.GL_COLOR_ARRAY);//允许设置颜色
  38.             initTriangle();  
  39.         }  
  40.         @Override
  41.         public
  42.     void onSurfaceChanged(GL10 gl, int w, int h) {  
  43.             gl.glViewport(0, 0, w, h);  
  44.         }  
  45.         public
  46.     void setAngle(float angle) {  
  47.             _angle = angle;  
  48.         }  
  49.         @Override
  50.         public
  51.     void onDrawFrame(GL10 gl) {  
  52.             // define the color we want to be displayed as the "clipping wall"
  53.             gl.glClearColor(_red, _green, _blue, 1.0f);  
  54.             // reset the matrix - good to fix the rotation to a static angle
  55.             gl.glLoadIdentity();  
  56.             // clear the color buffer to show the ClearColor we called above...
  57.             gl.glClear(GL10.GL_COLOR_BUFFER_BIT);  
  58.             // set rotation for the non-static triangle
  59.             gl.glRotatef(_angle, 0f, 1f, 0f);  
  60.             // gl.glColor4f(0.5f, 0f, 0f, 0.5f);
  61.             gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer);//设置顶点数组
  62.             gl.glColorPointer(4, GL10.GL_FLOAT, 0, _colorBuffer);//设置颜色数组
  63.             gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);  
  64.         }  
  65.         private
  66.     void initTriangle() {  
  67.             // float has 4 bytes
  68.             ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices * 3 * 4);  
  69.             vbb.order(ByteOrder.nativeOrder());  
  70.             _vertexBuffer = vbb.asFloatBuffer();  
  71.             // short has 4 bytes
  72.             ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices * 2);  
  73.             ibb.order(ByteOrder.nativeOrder());  
  74.             _indexBuffer = ibb.asShortBuffer();  
  75.             // float has 4 bytes, 4 colors (RGBA) * number of vertices * 4 bytes
  76.             ByteBuffer cbb = ByteBuffer.allocateDirect(4 * _nrOfVertices * 4);  
  77.             cbb.order(ByteOrder.nativeOrder());  
  78.             _colorBuffer = cbb.asFloatBuffer();  
  79.             float[] coords = {  
  80.                 -0.5f, -0.5f, 0f, // (x1, y1, z1)
  81.                 0.5f, -0.5f, 0f, // (x2, y2, z2)
  82.                 0.5f, 0.5f, 0f // (x3, y3, z3)
  83.             };  
  84.             float[] colors = {  
  85.                 1f, 0f, 0f, 1f, // point 1
  86.                 0f, 1f, 0f, 1f, // point 2
  87.                 0f, 0f, 1f, 1f, // point 3
  88.             };  
  89.             _vertexBuffer.put(coords);  
  90.             _indexBuffer.put(_indicesArray);  
  91.             _colorBuffer.put(colors);  
  92.             _vertexBuffer.position(0);  
  93.             _indexBuffer.position(0);  
  94.             _colorBuffer.position(0);  
  95.         }  
  96.         public
  97.     void setColor(float r, float g, float b) {  
  98.             _red = r;  
  99.             _green = g;  
  100.             _blue = b;  
  101.         }  
  102.     }  
复制代码



最终效果图:

176474_1285250918j18z.png

该贴已经同步到 煮咖啡的微博



上一篇:Android的OpenGL学习笔记(3)
下一篇:完美e端招募android、iphone开发牛人
0.0 ……加油吧……
  • TA的每日心情
    慵懒
    2013-11-4 18:27
  • 签到天数: 349 天

    连续签到: 0 天

    [LV.8]有房有车

    514

    主题

    30

    帖子

    3924

    积分

    木蚂蚁小学六年级

    Rank: 6Rank: 6

    积分
    3924

    社区QQ达人

    发表于 2011-3-16 17:38:24 | 显示全部楼层
    支持
    开学了............
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    推荐版块: PC破解软件下载  |   VR视频资源下载  |   三星Galaxy S8/S8+  |   恋舞OL  |   安卓破解软件  |   安卓破解游戏     安卓汉化下载  
    安卓android软件大全  |   安卓大型游戏  |   小米手机论坛  |   三星Galaxy Note8论坛  |   影视资源下载  |   安卓破解    
    安卓市场   安卓软件   小说电子书大全   在线影音播放   PC破解游戏下载   安卓软件教程   安卓游戏攻略   手机游戏   手机健康软件   手机订餐软件   手机购物软件   热门TAG
    快速回复 返回顶部 返回列表