鍍金池/ 教程/ Android/ 繪制線段 Line Segment
                                          繪制線段 Line Segment
                                          投影變換 Projection
                                          繪制迷你太陽系
                                          繪制一個球體
                                          繪制三角形 Triangle
                                          OpenGL 光照模型
                                          三維坐標系及坐標變換初步
                                          定義 3D 模型的前面和后面
                                          繪制一個 20 面體
                                          顏色 Color
                                          Depth Buffer
                                          材質及光照示例
                                          基本幾何圖形定義
                                          關于EGL
                                          導言
                                          Viewing 和 Modeling(MODELVIEW) 變換
                                          FrameBuffer
                                          設置光照效果 Set Lighting
                                          Viewport 變換
                                          階段小結
                                          繪制點 Point
                                          OpenGL ES API 命名習慣
                                          通用的矩陣變換指令
                                          關于 OpenGL ES
                                          創建實例應用 OpenGLDemos 程序框架
                                          OpenGL ES 管道(Pipeline)
                                          GLSurfaceView

                                          繪制線段 Line Segment

                                          創建一個 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。

                                          http://wiki.jikexueyuan.com/project/opengl-es-guide/images/57.png" alt="" />

                                          人妻精品动漫h无码中字