opengl 的基本上都会搜到 nehe 写的教程,很多地方都是这个教程的改写。我从两个星期前开始自学 opengl ,到目前总算略懂一二。因为最终想要用在 android 上面,所以我打算把 nehe 的教程移植到 android 平台上面讲解。同时也想与那些和我一起想在 android 上做游戏的朋友分享。本文章是菜鸟级别的,如果有误请指正。

本篇对应 nehe 的第一篇: OPENGL 窗口

本文假设大家会建立 android 应用程序了,也会大概使用 activity ,所以这些就不介绍了。 android 下面和 opengl 窗口相关的涉及到一个类 GLSurfaceView ,此类作用就是用来显示 Opengl 渲染。以下语句创建一个 GLSurfaceView 实例。

private GLSurfaceView  mView;mView = new GLSurfaceView(this);

以下设置真正的用来渲染的对象,这个对象负责真正的 opengl 工作。 MyRender 这个类稍后介绍。

mView.setRenderer(new MyRender());

接着设置渲染模式,有两种选择,一个是根据需要来渲染 (RENDERMODE_WHEN_DIRTY) ,另一个是不停地渲染。默认是 RENDERMODE_CONTINUOUSLY

mView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);

接着 setContentView

setContentView(mView);

Activity 生命周期

activity 暂停或者恢复时必须要通知 GLSurfaceView GLSurfaceView 需要相应地调用 onPause() onResume() 方法。这些方法允许 GLSurfaceView 暂停或恢复渲染线程,也能够让 GLSurfaceView 释放和重建 OpenGL 显示。以下是相关代码

@Overrideprotected void onPause() {     super.onPause();     mView.onPause();}   @Overrideprotected void onResume() {    super.onResume();    mView.onResume();}

下面创建 MyRender类

public class MyRender implements Renderer {          public MyRender(){       }        /**        * 显示当前帧的时候调用此方法        */       @Override       public void onDrawFrame(GL10 gl) {                    }        /**        * 当窗口大小发生改变时调用此方法        * 此方法在窗口第一次建立的时候也会被调用        */       @Override       public void onSurfaceChanged(GL10 gl, int width, int height) {             }        /**        * 当窗口创建或者重建的时候调用此方法        */       @Override       public void onSurfaceCreated(GL10 gl, EGLConfig config) {                    }}

如何全屏?

Activity onCreate() 方法适当位置加入以下代码

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().requestFeature(Window.FEATURE_NO_TITLE);

其中 getWindow() 获取当前 Activity 的窗口,取得窗口后设置全屏的标识。接着用 FEATURE_NO_TITLE 关掉屏幕顶端的标题。

接下来,大家就可以在模拟器中运行了,当然本程序中除了黑乎乎的平面,啥也没有。我知道本文等于啥都没说,下一篇会正式开始讲解 Opengl

参考文档: android-sdk-windows/docs/reference/android/opengl/GLSurfaceView.html

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. 了解Android堆和栈
  5. 「转载」彻底解析Android缓存机制——LruCache
  6. (转)Android从服务器端获取数据的几种方法
  7. Android(安卓)socket通信 readline方法阻塞
  8. Android中JNI的使用方法
  9. android:AsyncTask实现异步处理任务

随机推荐

  1. android常用的网络请求方式
  2. Android开发:使用CardView实现卡片式设计
  3. Android.os.SystemClock 介绍
  4. Android网络应用(图片查看器)
  5. android pageview 类 滑动跟随
  6. FileProvider.getUriForFile 报错 空指针
  7. Android(安卓)聚焦拍照和震动
  8. 通过zxing创建条码图片
  9. 多次调用 android onmesure onlayout
  10. SensorManager与Sensor交互