Android OpenGL ES 入門系列(二) --- 環境搭建
阿新 • • 發佈:2019-02-15
轉載請註明出處
本章介紹如何使用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.執行效果
參考: