有了前面关于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接口:

public class OpenGLRenderer implements Renderer {  private final IOpenGLDemo openGLDemo; public OpenGLRenderer(IOpenGLDemo demo){ openGLDemo=demo; }  public void onSurfaceCreated(GL10 gl, EGLConfig config) { // Set the background color to black ( rgba ). gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Enable Smooth Shading, default not really needed. gl.glShadeModel(GL10.GL_SMOOTH); // Depth buffer setup. gl.glClearDepthf(1.0f); // Enables depth testing. gl.glEnable(GL10.GL_DEPTH_TEST); // The type of depth testing to do. gl.glDepthFunc(GL10.GL_LEQUAL); // Really nice perspective calculations. gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);  }  public void onDrawFrame(GL10 gl) { if(openGLDemo!=null){ openGLDemo.DrawScene(gl); }  }  public void onSurfaceChanged(GL10 gl, int width, int height) { // Sets the current view port to the new size. gl.glViewport(0, 0, width, height); // Select the projection matrix gl.glMatrixMode(GL10.GL_PROJECTION); // Reset the projection matrix gl.glLoadIdentity(); // Calculate the aspect ratio of the window GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f); // Select the modelview matrix gl.glMatrixMode(GL10.GL_MODELVIEW); // Reset the modelview matrix gl.glLoadIdentity(); }}


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

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

public class HelloWorld extends Activity   implements IOpenGLDemo{     /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        this.requestWindowFeature(Window.FEATURE_NO_TITLE);        getWindow()         .setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,            WindowManager.LayoutParams.FLAG_FULLSCREEN);         mGLSurfaceView = new GLSurfaceView(this);        mGLSurfaceView.setRenderer(new OpenGLRenderer(this));        setContentView(mGLSurfaceView);    }     public void DrawScene(GL10 gl) {        gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);        // Clears the screen and depth buffer.        gl.glClear(GL10.GL_COLOR_BUFFER_BIT          | GL10.GL_DEPTH_BUFFER_BIT);     }     @Override    protected void onResume() {        // Ideally a game should implement        // onResume() and onPause()        // to take appropriate action when the        //activity looses focus        super.onResume();        mGLSurfaceView.onResume();    }     @Override    protected void onPause() {        // Ideally a game should implement onResume()        //and onPause()        // to take appropriate action when the        //activity looses focus        super.onPause();        mGLSurfaceView.onPause();    }     private GLSurfaceView mGLSurfaceView; }


其对应在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>

本例下载

更多相关文章

  1. Android的startActivity启动出错
  2. Android(安卓)8.0 Volte开关流程 HD图标显示
  3. 【Android】Android(安卓)Input
  4. android intent.setDate方法
  5. Android判断当前App是在前台还是在后台
  6. repo 切换分支一种简单的方法
  7. android 在java代码中动态设置控件的位置和设置片大小
  8. Ubuntu下使用git和repo下载Android的源代码
  9. Android(安卓)adapter中调用activity中的方法

随机推荐

  1. 详解 Android(安卓)的 Activity 组件
  2. Android(安卓)中如何获取editText文本信
  3. Android(安卓)- menu 相关
  4. Android(安卓)Canvas绘图详解(图文)
  5. android 按钮水波纹效果【背景色】
  6. android之MVC
  7. android:installLocation简析
  8. Android(安卓)数据存储(二) 文件的使用
  9. android 代码生成布局
  10. StevGuo系列文章翻译之Android内存泄漏检