Android OpenGL ES 开发教程(7):创建实例应用OpenGLDemos程序框架

来源:互联网 发布:黑蚂蚁网络电视 编辑:程序博客网 时间:2024/05/29 18:10

有了前面关于Android OpenGL ES的介绍,可以开始创建示例程序OpenGLDemos。

使用Eclipse 创建一个Android项目

  • Project Name: OpenGLDemos
  • Build Target: Android 1.6 ( >1.5 即可)
  • Application Name: Android OpenGL ES Demos
  • Package Name: com.pstreets.opengl.demo
  • Create Activity:AndroidOpenGLDemo

采用Android ApiDemos 类似的方法,AndroidOpenGLDemo为一ListActivity ,可以使用PackageManager 读取所有Category为guidebee.intent.category.opengl.SAMPLE_CODE 的Activity。 Android ApiDemos示例解析(2): SimpleAdapter,ListActivity,PackageManager

创建一个OpenGLRenderer 实现 GLSurfaceView.Renderer接口:

[java] view plaincopyprint?
  1. public class OpenGLRenderer implements Renderer {  
  2.    
  3.  private final IOpenGLDemo openGLDemo;  
  4.  public OpenGLRenderer(IOpenGLDemo demo){  
  5.  openGLDemo=demo;  
  6.  }  
  7.    
  8.  public void onSurfaceCreated(GL10 gl, EGLConfig config) {  
  9.  // Set the background color to black ( rgba ).  
  10.  gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);  
  11.  // Enable Smooth Shading, default not really needed.  
  12.  gl.glShadeModel(GL10.GL_SMOOTH);  
  13.  // Depth buffer setup.  
  14.  gl.glClearDepthf(1.0f);  
  15.  // Enables depth testing.  
  16.  gl.glEnable(GL10.GL_DEPTH_TEST);  
  17.  // The type of depth testing to do.  
  18.  gl.glDepthFunc(GL10.GL_LEQUAL);  
  19.  // Really nice perspective calculations.  
  20.  gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,  
  21.  GL10.GL_NICEST);  
  22.    
  23.  }  
  24.    
  25.  public void onDrawFrame(GL10 gl) {  
  26.  if(openGLDemo!=null){  
  27.  openGLDemo.DrawScene(gl);  
  28.  }  
  29.    
  30.  }  
  31.    
  32.  public void onSurfaceChanged(GL10 gl, int width, int height) {  
  33.  // Sets the current view port to the new size.  
  34.  gl.glViewport(00, width, height);  
  35.  // Select the projection matrix  
  36.  gl.glMatrixMode(GL10.GL_PROJECTION);  
  37.  // Reset the projection matrix  
  38.  gl.glLoadIdentity();  
  39.  // Calculate the aspect ratio of the window  
  40.  GLU.gluPerspective(gl, 45.0f,  
  41.  (float) width / (float) height,  
  42.  0.1f, 100.0f);  
  43.  // Select the modelview matrix  
  44.  gl.glMatrixMode(GL10.GL_MODELVIEW);  
  45.  // Reset the modelview matrix  
  46.  gl.glLoadIdentity();  
  47.  }  
  48. }  


 

DrawScene 用于实际的GL绘图示例代码,其它的初始化工作基本就由GLSurfaceView 和OpenGLRenderer 完成,其中onSurfaceCreated 和 onSurfaceChanged 中的代码含义现在无需了解,后面会有具体介绍,只要知道它们是用来初始化GLSurfaceView就可以了。

最后使用一个简单的例子“Hello World”结束本篇,“Hello World” 使用红色背景刷新屏幕。

[java] view plaincopyprint?
  1. public class HelloWorld extends Activity  
  2.    implements IOpenGLDemo{  
  3.    
  4.     /** Called when the activity is first created. */  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  9.         getWindow()  
  10.          .setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  11.             WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  12.    
  13.         mGLSurfaceView = new GLSurfaceView(this);  
  14.         mGLSurfaceView.setRenderer(new OpenGLRenderer(this));  
  15.         setContentView(mGLSurfaceView);  
  16.     }  
  17.    
  18.     public void DrawScene(GL10 gl) {  
  19.         gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);  
  20.         // Clears the screen and depth buffer.  
  21.         gl.glClear(GL10.GL_COLOR_BUFFER_BIT  
  22.           | GL10.GL_DEPTH_BUFFER_BIT);  
  23.    
  24.     }  
  25.    
  26.     @Override  
  27.     protected void onResume() {  
  28.         // Ideally a game should implement  
  29.         // onResume() and onPause()  
  30.         // to take appropriate action when the  
  31.         //activity looses focus  
  32.         super.onResume();  
  33.         mGLSurfaceView.onResume();  
  34.     }  
  35.    
  36.     @Override  
  37.     protected void onPause() {  
  38.         // Ideally a game should implement onResume()  
  39.         //and onPause()  
  40.         // to take appropriate action when the  
  41.         //activity looses focus  
  42.         super.onPause();  
  43.         mGLSurfaceView.onPause();  
  44.     }  
  45.    
  46.     private GLSurfaceView mGLSurfaceView;  
  47.    
  48. }  


 

其对应在AndroidManifest.xml中的定义如下:

<activity android:name=”.HelloWorld” android:label=”@string/activity_helloworld”>
<intent-filter>
< action android:name=”android.intent.action.MAIN” />
<category android:name=”guidebee.intent.category.opengl.SAMPLE_CODE” />
< /intent-filter>
< /activity>

本例下载


原文出处:http://blog.csdn.net/mapdigit/article/details/7571029

0 0
原创粉丝点击