Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android OpenGL學習筆記(二)之----三角形的繪制

Android OpenGL學習筆記(二)之----三角形的繪制

編輯:Android開發實例

前面講了一些Android OpenGl 的概念問題,這一節講給大家講一下如何畫一個三角現出來.

一、新建一個Android工程命名為:OpenGL_Lesson2.

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

 

  1. package com.android.tutor;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. public class OpenGL_Lesson2 extends Activity {  
  5.      
  6.     private OpenGlView mOpenGlView;  
  7.     public void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         
  10.         mOpenGlView = new OpenGlView(this);  
  11.         setContentView(mOpenGlView);  
  12.                 
  13.     }  

三、新建一個類OpenGlView.java繼承與GLSurfaceView,代碼如下:

 

  1. package com.android.tutor;  
  2. import android.content.Context;  
  3. import android.opengl.GLSurfaceView;  
  4. public class OpenGlView extends GLSurfaceView {  
  5.       
  6.     private OpenGlRender mOpenGlRender;  
  7.     public OpenGlView(Context context) {  
  8.         super(context);  
  9.         mOpenGlRender = new OpenGlRender();  
  10.         setRenderer(mOpenGlRender);  
  11.     }  
  12.       
  13.       
  14.       
  15. }  

四、新建一個OpenGlRender.java類繼承與Renderer,代碼如下:

 

  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.       
  11.     private float _red = 0f;  
  12.     private float _green = 25f;  
  13.     private float _blue = 200f;  
  14.       
  15.     private ShortBuffer _indexBuffer;  
  16.       
  17.     private FloatBuffer _vertexBuffer;  
  18.       
  19.       
  20.     private short[] _indicesArray = {0, 1, 2};  
  21.     private int _nrOfVertices = 3;  
  22.     @Override 
  23.     public void onSurfaceCreated(GL10 gl, EGLConfig config) {  
  24.           
  25.         gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);  
  26.         initTriangle();  
  27.     }  
  28.     @Override 
  29.     public void onSurfaceChanged(GL10 gl, int width, int height) {  
  30.           
  31.         gl.glViewport(0, 0, width, height);  
  32.     }  
  33.  
  34.       
  35.     @Override 
  36.     public void onDrawFrame(GL10 gl) {  
  37.         gl.glClearColor(_red, _green, _blue, 1.0f);  
  38.           
  39.         gl.glClear(GL10.GL_COLOR_BUFFER_BIT);  
  40.           
  41.          gl.glColor4f(0.5f, 0f, 0f, 0.5f);  
  42.          gl.glVertexPointer(_nrOfVertices, GL10.GL_FLOAT, 0, _vertexBuffer);  
  43.          gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);  
  44.     }  
  45.       
  46.     private void initTriangle() {  
  47.         // float has 4 bytes  
  48.         ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices * 3 * 4);  
  49.         vbb.order(ByteOrder.nativeOrder());  
  50.         _vertexBuffer = vbb.asFloatBuffer();  
  51.           
  52.         // short has 4 bytes  
  53.         ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices * 2);  
  54.         ibb.order(ByteOrder.nativeOrder());  
  55.         _indexBuffer = ibb.asShortBuffer();  
  56.           
  57.         float[] coords = {  
  58.             -0.5f, -0.5f, 0f, // (x1, y1, z1)  
  59.             0.5f, -0.5f, 0f, // (x2, y2, z2)  
  60.             0f, 0.5f, 0f // (x3, y3, z3)  
  61.         };  
  62.           
  63.         _vertexBuffer.put(coords);  
  64.           
  65.         _indexBuffer.put(_indicesArray);  
  66.           
  67.         _vertexBuffer.position(0);  
  68.         _indexBuffer.position(0);  
  69.     }  
  70. }  

五、運行之,效果如下:

今天晚上就先不做詳細解釋了!改日在加上!謝謝~

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved