鍍金池/ 教程/ Android/ 繪制一個球體
                                          繪制線段 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

                                          繪制一個球體

                                          OpenGL ES 只能通過繪制三角形來構造幾何圖形,比如前面繪制的 20 面體 Android OpenGL ES 開發教程(12):繪制一個 20 面體,通過增加正多面體的邊數,就可以構造出一個球體:

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

                                          在項目中創建一個 Sphere 類,它的 Draw 方法,通過繪制三角形來構造球體,并且為其添加法線,法線主要用于光照效果,將在后面介紹。

                                          public void draw(GL10 gl) {
                                           float    theta, pai;
                                           float    co, si;
                                           float    r1, r2;
                                           float    h1, h2;
                                           float    step = 2.0f;
                                           float[][] v = new float[32][3];
                                           ByteBuffer vbb;
                                           FloatBuffer vBuf;
                                           vbb = ByteBuffer.allocateDirect(v.length \* v[0].length \* 4);
                                           vbb.order(ByteOrder.nativeOrder());
                                           vBuf = vbb.asFloatBuffer();
                                           gl.glEnableClientState(GL10.GL\_VERTEX\_ARRAY);
                                           gl.glEnableClientState(GL10.GL\_NORMAL\_ARRAY);
                                           for (pai = -90.0f; pai < 90.0f; pai += step) {
                                           int    n = 0;
                                           r1 = (float)Math.cos(pai \* Math.PI / 180.0);
                                           r2 = (float)Math.cos((pai + step) \* Math.PI / 180.0);
                                           h1 = (float)Math.sin(pai \* Math.PI / 180.0);
                                           h2 = (float)Math.sin((pai + step) \* Math.PI / 180.0);
                                           for (theta = 0.0f; theta <= 360.0f; theta += step) {
                                           co = (float)Math.cos(theta \* Math.PI / 180.0);
                                           si = -(float)Math.sin(theta \* Math.PI / 180.0);
                                           v[n][0] = (r2 \* co);
                                           v[n][1] = (h2);
                                           v[n][2] = (r2 \* si);
                                           v[n + 1][0] = (r1 \* co);
                                           v[n + 1][1] = (h1);
                                           v[n + 1][2] = (r1 \* si);
                                           vBuf.put(v[n]);
                                           vBuf.put(v[n + 1]);
                                           n += 2;
                                           if(n>31){
                                           vBuf.position(0);
                                           gl.glVertexPointer(3, GL10.GL\_FLOAT, 0, vBuf);
                                           gl.glNormalPointer(GL10.GL\_FLOAT, 0, vBuf);
                                           gl.glDrawArrays(GL10.GL\_TRIANGLE\_STRIP, 0, n);
                                           n = 0;
                                           theta -= step;
                                           }
                                           }
                                           vBuf.position(0);
                                           gl.glVertexPointer(3, GL10.GL\_FLOAT, 0, vBuf);
                                           gl.glNormalPointer(GL10.GL\_FLOAT, 0, vBuf);
                                           gl.glDrawArrays(GL10.GL\_TRIANGLE\_STRIP, 0, n);
                                           }
                                           gl.glDisableClientState(GL10.GL\_VERTEX\_ARRAY);
                                           gl.glDisableClientState(GL10.GL\_NORMAL\_ARRAY);
                                          }  

                                          有了 Sphere 類,創建一個 DrawSphere Activity 來繪制球體,為了能看出 3D 效果,給場景中添加光源(后面介紹)

                                          public void DrawScene(GL10 gl) {
                                           super.DrawScene(gl);
                                           initScene(gl);
                                           sphere.draw(gl);
                                          }  

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

                                          本例下載

                                          上一篇:Depth Buffer下一篇:Viewport 變換
                                          人妻精品动漫h无码中字