標籤:
建立一個DrawLine Activity,定義四個頂點:
float vertexArray[] = { -0.8f, -0.4f * 1.732f, 0.0f, -0.4f, 0.4f * 1.732f, 0.0f, 0.0f, -0.4f * 1.732f, 0.0f, 0.4f, 0.4f * 1.732f, 0.0f,};
分別以三種模式GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP 來繪製直線:
public void DrawScene(GL10 gl) { super.DrawScene(gl); ByteBuffer vbb = ByteBuffer.allocateDirect(vertexArray.length*4); vbb.order(ByteOrder.nativeOrder()); FloatBuffer vertex = vbb.asFloatBuffer(); vertex.put(vertexArray); vertex.position(0); gl.glLoadIdentity(); gl.glTranslatef(0, 0, -4); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex); index++; index%=10; switch(index){ case 0: case 1: case 2: gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); gl.glDrawArrays(GL10.GL_LINES, 0, 4); break; case 3: case 4: case 5: gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 4); break; case 6: case 7: case 8: case 9: gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f); gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 4); break; } gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); }
這裡index 的目的是為了延遲一下顯示(更好的做法是使用固定時間間隔)。前面說過GLSurfaceView 的渲染模式有兩種,一種是連續不斷的更新螢幕,另一種為on-demand ,只有在調用requestRender() 在更新螢幕。 預設為RENDERMODE_CONTINUOUSLY 持續重新整理螢幕。
OpenGLDemos 使用的是預設的RENDERMODE_CONTINUOUSLY持續重新整理螢幕 ,因此Activity的drawScene 會不斷的執行。本例中螢幕上順序以紅,綠,藍色顯示LINES, LINE_STRIP,LINE_LOOP。
Android OpenGL ES(九)繪製線段Line Segment .