学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
等待楼主下篇~~~