使用openGL步驟:
1.創建GLSurfaceView對象
2.創建GLSurfaceView.renderer實現類.
3.設置activity的contentView,以及設置view的render對象.
4.實現render類的過程.
a.onSurfaceCreate()方法
1.設置清屏的顏色和啟用頂點緩沖區
//設置清屏色
gl.glClearColor(0, 0, 0, 1);
//啟用頂點緩沖區.
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
b.onSurfaceChanged()方法
1.設置viewport(視口)
gl.glViewport(0, 0, width, height);
2.操縱投影矩陣,設置平截頭體(比例通常和視口比例相同,否則輸出畫面會走樣)
//矩陣模式,投影矩陣,openGL基於狀態機
gl.glMatrixMode(GL10.GL_PROJECTION);
//加載單位矩陣
gl.glLoadIdentity();
//平截頭體
gl.glFrustumf(-1f, 1f, -ratio, ratio, 3, 7);
c.onDrawFrame()方法
1.清除顏色緩沖區
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
2.操縱模型視圖矩陣,設置眼球的參數
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();//加載單位矩陣
GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0);
3.定義圖形頂點坐標值數組
float[] coords = {
0f,0.5f,0f,
-0.5f,-0.5f,0f,
0.5f,-0.5f,0f
};
4.將頂點坐標轉換成緩沖區數據
//分配字節緩存區空間,存放頂點坐標數據
ByteBuffer ibb = ByteBuffer.allocateDirect(coords.length * 4);
//設置的順序(本地順序)
ibb.order(ByteOrder.nativeOrder());
//放置頂點坐標數組
FloatBuffer fbb = ibb.asFloatBuffer();
fbb.put(coords);
//定位指針的位置,從該位置開始讀取頂點數據
ibb.position(0);
5.設置繪圖顏色
gl.glColor4f(1f, 0f, 0f, 1f);
6.指定頂點緩沖區指針
//3:3維點,使用三個坐標值表示一個點
//type:每個點的數據類型
//stride:0,跨度.
//ibb:指定頂點緩沖區
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, ibb);
7.繪圖
//0:起始點:
//3:繪制點的數量
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);