Android OpenGL ES學習筆記之添加顏色

一、分類

添加顏色的種類有兩種

 - Flat coloring             單色

 - Smooth coloring           平滑着色

單色

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

還是以Android OpenGL ES學習筆記之繪製點代碼爲基礎

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

                  -0.6f , 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);  

運行,效果如下圖

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章