1. 程式人生 > >Android OpenGL ES學習筆記之新增顏色

Android OpenGL ES學習筆記之新增顏色

一、分類

新增顏色的種類有兩種

 - Flat coloring             單色

 - Smooth coloring           平滑著色

單色

顧命思義就是一種單一的顏色,呼叫 glColor4f(float red, float green, float blue, float alpha)方法傳入紅、綠、藍、透明度四個引數,取值0~1f。

public class MyRenderer implements GLSurfaceView.Renderer {
        //頂點陣列
        private float[] mArray = {

                  -0.6
f , 0.6f , 0f, -0.2f , 0f , 0f , 0.2f , 0.6f , 0f , }; // 緩衝區 private FloatBuffer mBuffer; public MyRenderer() { //獲取浮點形緩衝資料 mBuffer = Utils.getFloatBuffer(mArray); } // Surface建立的時候呼叫 @Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 設定清屏顏色為黑色 gl.glClearColor(0f, 0f, 0f, 0f); } // Surface改變的的時候呼叫 @Override public void onSurfaceChanged(GL10 gl, int width, int height) { // 設定視窗大小 gl.glViewport(0
, 0, width , height); } // 在Surface上繪製的時候呼叫 @Override public void onDrawFrame(GL10 gl) { // 清除螢幕 gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT); // 允許設定頂點 // GL10.GL_VERTEX_ARRAY頂點陣列 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 設定頂點 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mBuffer); //設定點的顏色為綠色 gl.glColor4f(0f, 1f, 0f, 0f); //設定點的大小 gl.glPointSize(40f); // 繪製點 gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 3); // 取消頂點設定 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } }

其中設定顏色程式碼

        //設定點的顏色為綠色
        gl.glColor4f(0f, 1f, 0f, 0f);

效果如下圖,單一的綠色

這裡寫圖片描述

平滑著色

就是給每個頂點定義一個顏色,然後頂點之間的面會顯示漸變色

呼叫glColorPointer(int size, int type, int stride, Buffer pointer)傳入四個引數

 - size ———— 指明每個顏色的元素數量,必須為4

 - type————— 指明每個矩陣中顏色元素的資料型別

 - stride————指明連續的點之間的位偏移,如果stride 為0 時,顏色被緊密擠入矩陣,初始值為0

 - pointer———指明包含顏色的緩衝區

定義一個頂點顏色色組

        //頂點顏色陣列
        private float[] mcolorArray = {

                      1f, 0f , 0f,0f,

                      0f , 1f , 0f ,0f,

                      0f , 0f , 1f ,0f
                };

轉化成緩衝資料

            //獲取浮點型顏色資料
            colorBuffer= Utils.getFloatBuffer(mcolorArray);

在原來的程式碼中加上

            // 開啟顏色渲染功能.  
            gl.glEnableClientState(GL10.GL_COLOR_ARRAY);  

            // 設定三角形頂點的顏色  
            gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);  

            //關閉顏色渲染功能.  
            gl.glDisableClientState(GL10.GL_COLOR_ARRAY);  

執行,效果如下圖

這裡寫圖片描述