鍍金池/ 教程/ Android/ 繪制三角形 Triangle
                                          繪制線段 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

                                          繪制三角形 Triangle

                                          三角形為 OpenGL ES 支持的面,同樣創建一個 DrawTriangle Activity,定義 6 個頂點使用三種不同模式來繪制三角形:

                                          float vertexArray[] = {
                                           -0.8f, -0.4f * 1.732f, 0.0f,
                                           0.0f, -0.4f * 1.732f, 0.0f,
                                           -0.4f, 0.4f * 1.732f, 0.0f,
                                           0.0f, -0.0f * 1.732f, 0.0f,
                                           0.8f, -0.0f * 1.732f, 0.0f,
                                           0.4f, 0.4f * 1.732f, 0.0f,
                                          };  

                                          本例繪制

                                          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_TRIANGLES, 0, 6);
                                           break;
                                           case 3:
                                           case 4:
                                           case 5:
                                           gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
                                           gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 6);
                                           break;
                                           case 6:
                                           case 7:
                                           case 8:
                                           case 9:
                                           gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
                                           gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 6);
                                           break;
                                           }
                                           gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
                                          }  

                                          這里 index 的目的是為了延遲一下顯示(更好的做法是使用固定時間間隔)。前面說過 GLSurfaceView 的渲染模式有兩種,一種是連續不斷的更新屏幕,另一種為 on-demand ,只有在調用 requestRender() 在更新屏幕。 缺省為 RENDERMODE_CONTINUOUSLY 持續刷新屏幕。

                                          OpenGLDemos 使用的是缺省的 RENDERMODE_CONTINUOUSLY 持續刷新屏幕 ,因此 Activity 的 drawScene 會不斷的執行。本例中屏幕上順序以紅,綠,藍色顯示 TRIANGLES, TRIANGLE_STRIP,TRIANGLE_FAN。

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

                                          人妻精品动漫h无码中字