鍍金池/ 教程/ Android/ 添加顏色
                                          3D 繪圖基本概念
                                          概述
                                          真正的 3D 圖形
                                          添加顏色
                                          3D 坐標變換
                                          構造
                                          材質渲染

                                          添加顏色

                                          前面的例子顯示的正方形都是白色,看其來不是很吸引人,本篇介紹如何給 Mesh(網格)添加顏色。OpenGL ES 使用顏色是我們熟知的 RGBA 模式(紅,綠,藍,透明度)。

                                          顏色的定義通常使用 Hex 格式 0xFF00FF 或十進制格式(255,0,255), 在 OpenGL 中卻是使用 0…1 之間的浮點數表示。0 為 0,1 相當于 255(0xFF)。

                                          最簡單的上色方法叫做頂點著色 (Vertxt coloring),可以使用單色,也可以定義顏色漸變或者使用材質(類同于二維圖形中各種 Brush 類型)。

                                          Flat coloring(單色)

                                          是通知 OpenGL 使用單一的顏色來渲染,OpenGL 將一直使用指定的顏色來渲染直到你指定其它的顏色。

                                          指定顏色的方法為

                                          public abstract void glColor4f(float red, float green, float blue, float alpha)。   

                                          缺省的 red,green,blue 為 1,代表白色。這也是為什么前面顯示的正方形都是白色的緣故。

                                          我們創建一個新的類為 FlatColoredSquare,作為 Sequare 的子類,將它的 draw 重定義如下:

                                          public void draw(GL10 gl) {
                                           gl.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);
                                           super.draw(gl);
                                          }  

                                          將 OpenGLRenderer 的 square 的類型改為 FlatColoredSquare。

                                          private FlatColoredSquare square=new FlatColoredSquare();  

                                          編譯運行,正方形顏色變成了藍色:

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

                                          Smooth coloring (平滑顏色過渡)

                                          當給每個頂點定義一個顏色時,OpenGL 自動為不同頂點顏色之間生成中間過渡顏色(漸變色)。

                                          在項目中添加一個 SmoothColoredSquare 類,作為 Square 子類,為每個頂點定義一個顏色值。

                                          // The colors mapped to the vertices.
                                          float[] colors = {
                                           1f, 0f, 0f, 1f, // vertex 0 red
                                           0f, 1f, 0f, 1f, // vertex 1 green
                                           0f, 0f, 1f, 1f, // vertex 2 blue
                                           1f, 0f, 1f, 1f, // vertex 3 magenta
                                          };  

                                          顏色定義的順序和頂點的順序是一致的。為了提高性能,和頂點坐標一樣,我們也把顏色數組放到Buffer 中:

                                          // float has 4 bytes, colors (RGBA) * 4 bytes
                                          ByteBuffer cbb
                                           = ByteBuffer.allocateDirect(colors.length * 4);
                                          cbb.order(ByteOrder.nativeOrder());
                                          colorBuffer = cbb.asFloatBuffer();
                                          colorBuffer.put(colors);
                                          colorBuffer.position(0);  

                                          最后修改 draw 方法,如下:

                                          public void draw(GL10 gl) {
                                          gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
                                          // Enable the color array buffer to be
                                          //used during rendering.
                                          gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
                                          // Point out the where the color buffer is.
                                          gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);
                                          super.draw(gl);
                                          // Disable the color buffer.
                                          gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
                                          }   

                                          將 OpenGLRenderer 中的 Square 類型改成 SmoothColoredSquare,編譯運行結果如下:

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

                                          上一篇:3D 坐標變換下一篇:概述
                                          人妻精品动漫h无码中字