Android OpenGL ES 簡明開發教程 05

來源:互聯網
上載者:User

前面的例子顯示的正方形都是白色,看其來不是很吸引人,本篇介紹如何給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();

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

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 bytesByteBuffer 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,編譯運行結果如下:

本地範例程式碼下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.