First_OpenGL_Project——手把手教你创建第一个安卓openGL2.0项目

来源:互联网 发布:美国eia原油库存数据公布时间 编辑:程序博客网 时间:2024/06/05 21:51

First_OpenGL_Project——手把手教你创建第一个安卓openGL2.0项目

本篇博客以代码为本,手把手教您建立第一个openGL的android项目。

新建项目

  1. 应用程序名称,输入:First OpenGL Project
  2. 最低SDK版本选择API 10:Andriod 2.3.3 (Gingerbread); 这是完全支持OpenGL ES 2.0 的最低版本号。

创建GLSurfaceView实例

现在看来没有多少代码:
/Users/fanyu/Desktop/FirstOpenGLProject/app/src/main/java/com/van/fanyu/firstopenglproject/MainActivity.java

package com.van.fanyu.firstopenglproject;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

给这个activity添加一个GLSurfaceView实例,这样就可以初始化OpenGL。
/Users/fanyu/Desktop/FirstOpenGLProject/app/src/main/java/com/van/fanyu/firstopenglproject/MainActivity.java

public class MainActivity extends AppCompatActivity {    private GLSurfaceView glSurfaceView;    private boolean rendererSet = false;

移除setContentView(),并初始化glSurfaceView。
/Users/fanyu/Desktop/FirstOpenGLProject/app/src/main/java/com/van/fanyu/firstopenglproject/MainActivity.java

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        glSurfaceView = new GLSurfaceView(this);

检查系统是否支持OpenGL2.0

/Users/fanyu/Desktop/FirstOpenGLProject/app/src/main/java/com/van/fanyu/firstopenglproject/MainActivity.java

    //检查系统是否支持OpenGL2.0    final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);    final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();    final boolean supportsEs2 = configurationInfo.reqGlEsVersion>=0x20000;

为OpenGL配置渲染表面

/Users/fanyu/Desktop/FirstOpenGLProject/app/src/main/java/com/van/fanyu/firstopenglproject/MainActivity.java

    @Override    protected void onCreate(Bundle savedInstanceState) {        ……        if (supportsEs2){            glSurfaceView.setEGLContextClientVersion(2);            glSurfaceView.setRenderer(new FirstOpenGLProjectRender());        }else {            Toast.makeText(this,"This device does not support OpenGL ES 2.0",Toast.LENGTH_LONG).show();            return;        }        setContentView(glSurfaceView);

在activity生命周期中处理glSurfaceView

以下代码比较重要,否则程序会崩溃:
/Users/fanyu/Desktop/FirstOpenGLProject/app/src/main/java/com/van/fanyu/firstopenglproject/MainActivity.java

    @Override    protected void onPause() {        super.onPause();        if (rendererSet){            glSurfaceView.onPause();        }    }    @Override    protected void onResume() {        super.onResume();        if (rendererSet){            glSurfaceView.onResume();        }    }

创建Renderer类

在同一个包里创建一个FirstOpenGLProjectRender类,用来实现Renderer接口。
/Users/fanyu/Desktop/FirstOpenGLProject/app/src/main/java/com/van/fanyu/firstopenglproject/FirstOpenGLProjectRender.java

package com.van.fanyu.firstopenglproject;import android.opengl.GLSurfaceView;import javax.microedition.khronos.egl.EGLConfig;import javax.microedition.khronos.opengles.GL10;import static android.opengl.GLES20.GL_COLOR_BUFFER_BIT;import static android.opengl.GLES20.glClear;import static android.opengl.GLES20.glClearColor;import static android.opengl.GLES20.glViewport;/** * Created by fanyu on 16/2/21. */public class FirstOpenGLProjectRender implements GLSurfaceView.Renderer {    //类似于activity的onCreate方法    @Override    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {        //设置清空屏幕用的颜色        //前三个参数分别对应红色、绿色和蓝色。最后一个参数被称为alpha,用来表示透明度。        glClearColor(1.0f,0.0f,0.0f,0.0f);    }    //屏幕尺寸变化时调用此方法    @Override    public void onSurfaceChanged(GL10 gl, int width, int height) {        //设置GLSurfaceView显示出来的尺寸        glViewport(0,0,width,height);    }    //当绘制一帧时,这个方法会被调用。在这个方法中,一定要绘制一些东西,即使只是清空屏幕,否则会显示混乱。    @Override    public void onDrawFrame(GL10 gl) {        //此操作会清空屏幕所有颜色,并用之前glClearColor()所定义的颜色填充整个屏幕        glClear(GL_COLOR_BUFFER_BIT);    }}

小结

本项目初始化了OpenGL、响应了Android Activity的生命周期,最后清空了屏幕。

作者信息

  • 个人博客:http://blog.csdn.net/fy9987899
  • github项目:https://github.com/fanyu2013/Android-Blogs
0 0