Android OpenGL ES2.0基础(一、最简单的使用)

一、OpenGL ES是什么

OpenGL(Open Graphics Library)是一个跨编程语言、跨平台的3D图形库。广泛应用于游戏、娱乐、VR等领域.安卓系统中的核心库层就有这个。OpenGL ES是在OpenGL基础上针对移动端而裁剪的 。OpenGL ES由当初的1.0、2.0发展到现在的3.0了。我这个系列是针对2.0的.因为3.0的只支持android 4.3以上的版本,即时是4.3以上,有的手机硬件也还不支持3.0 。

二、开发要点

对于OpenGL最简单的开发只需用两个类即可,GLSurfaceView和GLSurfaceView.Renderer。
  1. GLSurfaceView可以直接new,也可以放到布局里。
  2. 一个GLSurfaceView要配套一个Renderer,这个Renderer是一个接口,里面有三个函数。这点跟Surfaceiew很像。尤其是其中的onDrawFrame()可以类比为Android里View的onDraw()函数。
interface GLSurfaceView.Renderer {
//在Surface创建的时候调用,可以在这里进行一些初始化操作
public void onSurfaceCreated(GL10 gl, EGLConfig config);
//在Surface改变的的时候调用
public void onSurfaceChanged(GL10 gl, int width, int height);
//在Surface上绘制的时候调用
public void onDrawFrame(GL10 gl);
}
  1. 记得在Manifests文件中添加
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
<supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />

三、着(kai)手(shi)开(ru)发(keng)

  1. 新建一个Android项目
  2. 新建GLSurfaceView实例
  3. 创建渲染器Renderer实例
  4. 给GLSurfaceView设置Renderer实例
  5. 显示GLSurfaceView

MyGLSurfaceView继承自GLSurfaceView

import android.content.Context;
import android.opengl.GLSurfaceView;
import android.view.MotionEvent;
/**
 * Created by Administrator on 2017/3/8.
 * description :
 */
public class MySurfaceView extends GLSurfaceView {

    MyRenderer mRenderer;

    public MySurfaceView(Context context) {
        super(context);
        init();
    }
    private void init(){
        // 创建一个OpenGL ES 2.0 context
        setEGLContextClientVersion(2);
        //创建渲染器实例
        mRenderer = new MyRenderer();
        // 设置渲染器
        setRenderer(mRenderer);
        //设置渲染模式
        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    }
}

Render的渲染模式有两种

  1. GLSurfaceView.RENDERMODE_CONTINUOUSLY
    不间断的绘制,默认渲染模式是这种
  2. GLSurfaceView.RENDERMODE_WHEN_DIRTY
    不会主动绘制,也就是当调用GLSurfaceView的requestRender()方法后才会执行一次(第一次运行的时候会自动绘制一次)

MyRender继承自GLSurfaceView.Renderer,一些初始化和一些逻辑都在这里进行

public class MyRenderer implements GLSurfaceView.Renderer {

        // Surface创建的时候调用
        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            // 设置清屏颜色
            GLES20.glClearColor(0f, 1f, 0f, 0f);
        }
        // Surface改变的的时候调用
        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            // 设置窗口大小
            GLES20.glViewport(0, 0, width, height);
        }
        // 在Surface上绘制的时候调用
        @Override
        public void onDrawFrame(GL10 gl) {
            //调用glClear(GL10.GL_COLOR_BUFFER_BIT)方法清除屏幕颜色,执行这个方法之后
            //屏幕就会渲染之前通过glClearColor设置的清屏颜色.
            GLES20.glClear(GL10.GL_COLOR_BUFFER_BIT);
        }
 }

在MainActivity中使用

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

/**
 * Created by Administrator on 2017/3/8.
 * description :
 */
public class MainActivity extends AppCompatActivity {

    MySurfaceView mySurfaceView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mySurfaceView = new MySurfaceView(this);
        setContentView(mySurfaceView);
    }
    @Override
    protected void onPause() {
        super.onPause();
        mySurfaceView.onPause();
    }
    @Override
    protected void onResume() {
        super.onResume();
        mySurfaceView.onResume();
    }
}

运行效果

Android OpenGL ES2.0基础(一、最简单的使用)_第1张图片

你可能感兴趣的:(Android基础)