android-opengles3.0開發【3】給圖形添加顏色

opengles 的給圖形添加顏色很簡單,在上篇文章的基礎上改動幾處便可。java

1. 修改着色器

頂點着色器須要聲明一個接收顏色數據的輸入變量 aColor ,以及一個輸出變量 vColor ,並在 main() 方法中,將 aColor 賦值給 vColor,用之後續將顏色輸出到片斷着色器。markdown

private static final String vertextShaderSource =
            "#version 300 es\n"
                    + "layout (location = 0) in vec4 vPosition;\n"
                    //接收顏色數據的輸入變量
                    + "layout (location = 1) in vec4 aColor;\n"
                    //輸出變量
                    + "out vec4 vColor;\n"
                    + "void main()\n"
                    + "{\n"
                    + " gl_Position = vPosition;\n"
                    //給輸出變量賦值
                    + " vColor = aColor;\n"
                    + "}\n";
複製代碼

片斷着色器須要聲明一個接收顏色數據的輸入變量 vColor,並賦值給 fragColor。spa

private static final String fragmentShaderSource =
            "#version 300 es \n"
                    + "precision mediump float; \n"
                    //接收顏色數據的輸入變量
                    + "in vec4 vColor; \n"
                    + "out vec4 fragColor; \n"
                    + "void main() \n"
                    + "{ \n"
                    //將顏色數據輸出
                    + " fragColor = vColor; \n"
                    + "} \n";
複製代碼

2. 準備顏色數據

顏色數據的準備操做和頂點數據的操做同樣。code

//頂點顏色
    private static final float[] verticeColors = {
            0.0f, 1.0f, 0.0f, 1.0f,
            1.0f, 0.0f, 0.0f, 1.0f,
            0.0f, 0.0f, 1.0f, 1.0f
    };

        //將頂點顏色數據拷貝映射到 native 內存中,以便opengl可以訪問
        verticeColorsBuffer = ByteBuffer
                .allocateDirect(verticeColors.length * BYTES_PER_FLOAT)
                .order(ByteOrder.nativeOrder())
                .asFloatBuffer();
        verticeColorsBuffer
                .put(verticeColors)
                .position(0);
複製代碼

3. 繪製

繪製的時候將顏色數據綁定到相應的屬性位置,具體操做和頂點數據同樣。orm

//獲取 vColor 屬性位置
        int aColor = GLES30.glGetAttribLocation(program, "aColor");
        //加載頂點顏色數據到 vColor 屬性位置
        GLES30.glEnableVertexAttribArray(aColor);
        GLES30.glVertexAttribPointer(aColor, 4, GLES30.GL_FLOAT, false, 0, verticeColorsBuffer);
複製代碼

總結

本文梳理了顏色添加的基本流程,給繪製的三角形添加了簡單的顏色。內存

相關文章
相關標籤/搜索