构建OpenGL ES环境

为了在Android Application中使用OpenGL ES绘制图形。您必须为它门创建一个视图容器。其中直接的方法就是实现GLSurfaceViewGLSurfaceView.RendererGLSurfaceView是使用OpenGL绘制图形的视图容器,GLSurfaceView.Renderer控制在该视图中绘制的内容。有关这些类的更多信息,请参阅OpenGL ES开发人员指南。

GLSurfaceView只是应用程序包含OpenGL ES图形的一种方法。对于全屏或接近全屏图形视图,这是一个合理的选择。如果您想在Layout的某一部分包含OpenGL ES图形,因该看下TextureView。您也可以使用SurfaceView构建OpenGL ES视图,这需要编写相当多的额外代码。

要使用OpenGL ES,需在AndroidManifest.xml中声明。

使用OpenGL ES 2.0 API 这样声明:

<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" />

为OpenGL ES创建Activity:

public class OpenGLES20Activity extends Activity {

    private GLSurfaceView mGLView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity.
        mGLView = new MyGLSurfaceView(this);
        setContentView(mGLView);
    }
}

注意:OpenGL ES 2.0需要Android 2.2(API级别8)或更高版本,因此请确保您的Android项目以该API或更高版本为目标。

创建GLSurfaceView object

class MyGLSurfaceView extends GLSurfaceView {

    private final MyGLRenderer mRenderer;

    public MyGLSurfaceView(Context context){
        super(context);

        // Create an OpenGL ES 2.0 context
        setEGLContextClientVersion(2);

        mRenderer = new MyGLRenderer();

        // 设置渲染器
        setRenderer(mRenderer);
    }
}

你还可以设置渲染器模式:

/*仅在绘图数据发生更改时才渲染视图*/
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

创建Renderer:控制关联GLSufaceView的绘制内容

public class MyGLRenderer implements GLSurfaceView.Renderer {

    /**
    *设置视图的OpenGL ES环境时调用一次
    */
    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    }

    /**
    *每次重绘都会调用
    */
    public void onDrawFrame(GL10 unused) {
        // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }

    /**
    *视图的几何图形发生更改(例如,设备的屏幕方向更改时),则调用此方法。
    */
    public void onSurfaceChanged(GL10 unused, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
    }
}

上面的代码示例创建了一个简单的Android应用程序,它使用OpenGL显示黑屏。 虽然这段代码没有做任何有趣的事情,但通过创建这些类,您已经奠定了开始使用OpenGL绘制图形元素所需的基础。

推荐阅读更多精彩内容

  • 官方文档地址 Android包含Open Graphics Library(OpenGL®)库,特别是OpenGL...
    sjj_dot阅读 2,057评论 0 10
  • OpenGL ES Android包含支持高性能2D和3D图形绘制开源库(OpenGL),尤其是OpenGL ES...
    Ricky_Zeng阅读 3,151评论 0 10
  • 1 OpenGL ES简介 谈到OpenGL ES,首先我们应该先去了解一下Android的基本架构,基本架构下图...
    张俊峰0613阅读 2,360评论 0 10
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,035评论 24 696
  • 有的时候。 放不下的一段感情。放不下的一个人。 是因为他曾经深刻的出现过在你的生命里。给过你一段难忘的记忆。即使后...
    温酒煮词阅读 137评论 0 0
  • 1.教师资格证考过 2.决定在广州工作或者留在珠海,工作要不要换 3.学日语 4.学会尤克里里 5.减掉10斤 体...
    mingomi阅读 94评论 0 0
  • 嗯没错今天又是画小男孩最多的人(ó﹏ò。)还是画得……一言难尽 就酱吧就酱吧 ꒰╬•᷅д•᷄╬꒱
    果酱qwqwq阅读 87评论 2 2