前面讲了一些Android OpenGl 的概念问题,这一节讲给大家讲一下如何画一个三角现出来.

一、新建一个Android工程命名为:OpenGL_Lesson2.

二、修改OpenGL_Lesson2.java代码如下:

view plain copy to clipboard print ?
  1. package com.android.tutor;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class OpenGL_Lesson2 extends Activity{
  5. private OpenGlViewmOpenGlView;
  6. public void onCreate(BundlesavedInstanceState){
  7. super .onCreate(savedInstanceState);
  8. mOpenGlView= new OpenGlView( this );
  9. setContentView(mOpenGlView);
  10. }
  11. }
复制 打印
  1. package com.android.tutor;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class OpenGL_Lesson2 extends Activity{
  5. private OpenGlViewmOpenGlView;
  6. public void onCreate(BundlesavedInstanceState){
  7. super .onCreate(savedInstanceState);
  8. mOpenGlView=new OpenGlView( this );
  9. setContentView(mOpenGlView);
  10. }
  11. }

三、新建一个类OpenGlView.java继承与GLSurfaceView,代码如下:

view plain copy to clipboard print ?
  1. package com.android.tutor;
  2. import android.content.Context;
  3. import android.opengl.GLSurfaceView;
  4. public class OpenGlView extends GLSurfaceView{
  5. private OpenGlRendermOpenGlRender;
  6. public OpenGlView(Contextcontext){
  7. super (context);
  8. mOpenGlRender= new OpenGlRender();
  9. setRenderer(mOpenGlRender);
  10. }
  11. }
复制 打印
  1. package com.android.tutor;
  2. import android.content.Context;
  3. import android.opengl.GLSurfaceView;
  4. public class OpenGlView extends GLSurfaceView{
  5. private OpenGlRendermOpenGlRender;
  6. public OpenGlView(Contextcontext){
  7. super (context);
  8. mOpenGlRender=new OpenGlRender();
  9. setRenderer(mOpenGlRender);
  10. }
  11. }

四、新建一个OpenGlRender.java类继承与Renderer,代码如下:

view plain copy to clipboard print ?
  1. package com.android.tutor;
  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.Renderer;
  9. public class OpenGlRender implements Renderer{
  10. private float _red=0f;
  11. private float _green=25f;
  12. private float _blue=200f;
  13. private ShortBuffer_indexBuffer;
  14. private FloatBuffer_vertexBuffer;
  15. private short []_indicesArray={ 0 , 1 , 2 };
  16. private int _nrOfVertices= 3 ;
  17. @Override
  18. public void onSurfaceCreated(GL10gl,EGLConfigconfig){
  19. gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  20. initTriangle();
  21. }
  22. @Override
  23. public void onSurfaceChanged(GL10gl, int width, int height){
  24. gl.glViewport( 0 , 0 ,width,height);
  25. }
  26. @Override
  27. public void onDrawFrame(GL10gl){
  28. gl.glClearColor(_red,_green,_blue, 1 .0f);
  29. gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
  30. gl.glColor4f( 0 .5f,0f,0f, 0 .5f);
  31. gl.glVertexPointer(_nrOfVertices,GL10.GL_FLOAT, 0 ,_vertexBuffer);
  32. gl.glDrawElements(GL10.GL_TRIANGLES,_nrOfVertices,GL10.GL_UNSIGNED_SHORT,_indexBuffer);
  33. }
  34. private void initTriangle(){
  35. //floathas4bytes
  36. ByteBuffervbb=ByteBuffer.allocateDirect(_nrOfVertices* 3 * 4 );
  37. vbb.order(ByteOrder.nativeOrder());
  38. _vertexBuffer=vbb.asFloatBuffer();
  39. //shorthas4bytes
  40. ByteBufferibb=ByteBuffer.allocateDirect(_nrOfVertices* 2 );
  41. ibb.order(ByteOrder.nativeOrder());
  42. _indexBuffer=ibb.asShortBuffer();
  43. float []coords={
  44. - 0 .5f,- 0 .5f,0f, //(x1,y1,z1)
  45. 0 .5f,- 0 .5f,0f, //(x2,y2,z2)
  46. 0f, 0 .5f,0f //(x3,y3,z3)
  47. };
  48. _vertexBuffer.put(coords);
  49. _indexBuffer.put(_indicesArray);
  50. _vertexBuffer.position( 0 );
  51. _indexBuffer.position( 0 );
  52. }
  53. }
复制 打印
  1. package com.android.tutor;
  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.Renderer;
  9. public class OpenGlRender implements Renderer{
  10. private float _red=0f;
  11. private float _green=25f;
  12. private float _blue=200f;
  13. private ShortBuffer_indexBuffer;
  14. private FloatBuffer_vertexBuffer;
  15. private short []_indicesArray={ 0 , 1 , 2 };
  16. private int _nrOfVertices= 3 ;
  17. @Override
  18. public void onSurfaceCreated(GL10gl,EGLConfigconfig){
  19. gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  20. initTriangle();
  21. }
  22. @Override
  23. public void onSurfaceChanged(GL10gl, int width, int height){
  24. gl.glViewport(0 , 0 ,width,height);
  25. }
  26. @Override
  27. public void onDrawFrame(GL10gl){
  28. gl.glClearColor(_red,_green,_blue,1 .0f);
  29. gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
  30. gl.glColor4f(0 .5f,0f,0f, 0 .5f);
  31. gl.glVertexPointer(_nrOfVertices,GL10.GL_FLOAT,0 ,_vertexBuffer);
  32. gl.glDrawElements(GL10.GL_TRIANGLES,_nrOfVertices,GL10.GL_UNSIGNED_SHORT,_indexBuffer);
  33. }
  34. private void initTriangle(){
  35. //floathas4bytes
  36. ByteBuffervbb=ByteBuffer.allocateDirect(_nrOfVertices*3 * 4 );
  37. vbb.order(ByteOrder.nativeOrder());
  38. _vertexBuffer=vbb.asFloatBuffer();
  39. //shorthas4bytes
  40. ByteBufferibb=ByteBuffer.allocateDirect(_nrOfVertices*2 );
  41. ibb.order(ByteOrder.nativeOrder());
  42. _indexBuffer=ibb.asShortBuffer();
  43. float []coords={
  44. -0 .5f,- 0 .5f,0f, //(x1,y1,z1)
  45. 0 .5f,- 0 .5f,0f, //(x2,y2,z2)
  46. 0f,0 .5f,0f //(x3,y3,z3)
  47. };
  48. _vertexBuffer.put(coords);
  49. _indexBuffer.put(_indicesArray);
  50. _vertexBuffer.position(0 );
  51. _indexBuffer.position(0 );
  52. }
  53. }

五、运行之,效果如下:

今天晚上就先不做详细解释了!改日在加上!谢谢~

更多相关文章

  1. 如何动态的设置Relative Layout中按钮的layout_align_parent_rig
  2. adb命令执行java代码
  3. Android图片堆叠效果实现
  4. Android(安卓)WebView加载HTML表单并通过javascript提交
  5. android上传图片到服务器,求服务器那边和android的Activity的完整
  6. 自定义Android菜单背景
  7. Android设备的识别
  8. Maven + Eclipse + Android(安卓)环境搭建
  9. android studio的Gradle各种配置汇总

随机推荐

  1. Android(安卓)录音
  2. Android(安卓)framework源码按键操作的完
  3. Android(2017-2018)BAT面试题整理(Java篇,
  4. 自定义progressbar 样式
  5. Android(安卓)listview 制作表格样式+由
  6. android Intent在活动之间穿梭
  7. Android中如何让手机屏幕不待机
  8. Android(安卓)中文API (91) ―― GestureDe
  9. Android(安卓)SDK代理服务器解决国内不能
  10. Failed to fetch URL https://dl-ssl.goo