再加上我想要做這個已經想很久了
於是我就來邊開發邊寫一下筆記
希望能夠幫助到想學習OpenGL ES的初學者
(也希望我會堅持寫下去...)
小小介紹一下OpenGL ES
OPENGL ES(OpenGL for Embedded Systems)
是專門為嵌入式系統設計的OpenGL
API用法其實跟原來版本的OpenGL沒差多少
Android 中所有畫面其實也是由OpenGL ES畫出來的
1. 建立專案
在這裡我使用的是Android studio,開啟新Blank Activity,這裡就不詳細描述了
2. 檢查OpenGL 版本
本專案我以OpenGL 2.0為主
下圖來自Android Developers官網(2015/4/5)
https://developer.android.com/about/dashboards/index.html?utm_source=suzunone
可見現在所有的裝置已經至少都2.0以上了
網路上1.0的舊資料基本上可以跳過不用看了
上述程式碼用來檢查手機的GLES版本
如果熟悉Android的開發者應該馬上就知道這邊做了甚麼事
參考一下官方文件:
public int reqGlEsVersion
Added in API level 4
The GLES version used by an application. The upper order 16 bits represent the major version and the lower order 16 bits the minor version.
簡單的來說2開頭就是支援到2.0,3開頭支援到3.0
知道了GLES版本後我們就來做個小小的限制
讓不支援2.0版本的裝置無法安裝
在AndroidManifest.xml 裡加入
3. GLSurfaceView
顯示文字我們用TextView,
要顯示OpenGL 就要使用GLSurfaceView了
跟一般Android APP一樣
第一步先建立好xml檔
再來在MainActivity加入下列程式碼
這邊有一個重點
GLSurfaceView 一定要搭配GLSurfaceView.Renderer才能渲染出圖形
這個Renderer的責任包含了視角的轉換以及圖形的繪製等等
然而原始的GLSurfaceView.Renderer是abstract class
我們必須實做他所有的Methods
4. Renderer
總共要實做3個Method
onSurfaceChanged(GL10 gl, int width, int height) : surface 改變大小時呼叫
onSurfaceCreated(GL10 gl, EGLConfig config) : surface 建立時呼叫
onDrawFrame(GL10 gl) : 繪圖時呼叫
*當手機進行休眠狀態時,onSurfaceCreated會去重新呼叫一次,
如果想避免他重新呼叫,
就要在GLSurfaceView初始化時setPreserveEGLContextOnPause(boolean) 設為true
並且在Activity 的onPause(),onResume()中加入
GLSurfaceView.onPause(), GLSurfaceView.onResume()
由於我們使用的是2.0版本,已經不需要GL10這參數
我參(ㄊㄡ)考(ㄌㄞˊ)了網路上的高手
改寫成以下版本
改寫成這版本後只需要注意兩件事
1. 初始化時需要做甚麼
2. 每個Frame我們應該要Show甚麼
5. 執行
以上做完後就可以得到一個國防布啦
下一篇就會開始繪製圖形
下一篇就會開始繪製圖形
SourceCode:
版本號671fb71eaa
Reference:
作者已經移除這則留言。
回覆刪除