1. 程式人生 > >Android OpenGL ES 入門系列(二) --- 環境搭建

Android OpenGL ES 入門系列(二) --- 環境搭建

轉載請註明出處


本章介紹如何使用GLSurfaceView和GLSurfaceView.Renderer完成在Activity中的最簡單實現。

1.在AndroidManifest.xml的manifest節點中宣告OpenGL ES的使用

   <!--宣告OpenGL ES 2.0版本-->
    <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" />

2.構建GLSurfaceView物件

我們一般都會繼承GLSurfaceView寫一個拓展類,如下:

public class MyGLSurfaceView extends GLSurfaceView {


    public MyGLSurfaceView(Context context) {
        this(context, null);
    }


    public MyGLSurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }


    public void init() {
        // 設定EGLContext客戶端使用OpenGL ES 2.0 版本
        setEGLContextClientVersion(2);


        MyGLRenderer mRenderer = new MyGLRenderer();


        // 設定渲染器到GLSurfaceView上
        setRenderer(mRenderer);
    }
}

3.構建Renderer類

Renderer渲染器決定著在GLSurfaceView上繪製什麼和如何繪製

我們在以下渲染器中實現了繪製黑屏

public class MyGLRenderer implements GLSurfaceView.Renderer {
    @Override
    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {
        //指定重新整理顏色緩衝區時所用的顏色
        //需要注意的是glClearColor只起到Set的作用,並不Clear。
        //glClearColor更類似與初始化,如果不做,新的繪製就會繪製在以前的上面,類似於混合,而不是覆蓋
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    }


    @Override
    public void onSurfaceChanged(GL10 gl10, int width, int height) {
        //glViewport用於告訴OpenGL應把渲染之後的圖形繪製在窗體的哪個部位、大小
        GLES20.glViewport(0, 0, width, height);
    }


    @Override
    public void onDrawFrame(GL10 gl10) {
        //glClear表示清除緩衝  傳入GL_COLOR_BUFFER_BIT指要清除顏色緩衝
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }
}

4.在Activity中使用我們定義的MyGLSurfaceView

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.hansion.learnopengles.MainActivity">


    <com.hansion.learnopengles.opengl.MyGLSurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


</RelativeLayout>

上面的示例程式碼完成了一個使用OpenGL顯示黑屏的簡單功能。雖然沒有做任何有趣的事情,但通過建立這些類,您已經奠定了開始使用OpenGL繪製圖形元素所需的基礎。

5.執行效果

328b396f7f88468b4d9f48e6bacb8085

參考: