Android(安卓)Opengl开发一
学 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
更多相关文章
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用
- python list.sort()根据多个关键字排序的方法实现
- 了解Android堆和栈
- 「转载」彻底解析Android缓存机制——LruCache
- (转)Android从服务器端获取数据的几种方法
- Android(安卓)socket通信 readline方法阻塞
- Android中JNI的使用方法
- android:AsyncTask实现异步处理任务