3 绘制三角形

GLES20彩色三角形

新建顶点着色器,片段着色器

  • 在 main/res/raw 目录下创建两个glsl 文件

    • fragment_triangle.glsl

      #version 100
      precision mediump float;
      varying vec4 vColor;
      void main(){
        gl_Fragment = vColor;
      }
      
    • vert_triangle.glsl

      #version 100 
      attribute vec4 vPosition;
      attribute vec4 aColor;
      
      varying vec4 vColor;
      void main(){
        gl_Position = vPostion;
        vColor = aColor
      }
      

创建MyRenderer 绘制图像

  1. 声明片面着色器代码,顶点着色器, 以及坐标点属性(坐标点, 和每个坐标对应的颜色值 float类型)

    颜色值Color 的类型为 RGBA格式, 其中 最大值为1, 最小值为0.

    坐标点为 xyz 轴,顺序数即可,

    
    private float[] triangleArray = new float[]{
            0.5f,-0.5f,0,
            0.5f,0.5f,0,
            -0.5f,-0.5f,0
    };
    
    float color[] = {
            0.0f, 1.0f, 0.0f, 1.0f,
            1.0f, 0.0f, 0.0f, 1.0f,
            0.0f, 0.0f, 1.0f, 1.0f
    };
    

  2. 使用定义的函数将 shader 和 program 链接

    2-提取 Program 对象的工具类.md

    ShaderUtils.createProgram(this.getResources() , vertexCodePath , fragmentCodePath)
    

  3. 在MyRenderer 的onDrawFrame(GL10 gl)里面开始绘制图像

     @Override
        public void onDrawFrame(GL10 gl) {
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
            //将 mProgram 里面的程序加载入 GLES20 的环境.
            GLES20.glUseProgram(mProgram);
    
            //开始对着色器里面的变量进行赋值.
            int positionHandler = GLES20.glGetAttribLocation(mProgram , "vPosition");
            GLES20.glEnableVertexAttribArray(positionHandler);
            GLES20.glVertexAttribPointer(positionHandler,3,GLES20.GL_FLOAT ,false,12,triangleBuffer);
    
    //加载彩色句柄, 设置3个点的颜色值.
            int colorHandler = GLES20.glGetAttribLocation(mProgram , "aColor");
            GLES20.glEnableVertexAttribArray(colorHandler);
            GLES20.glVertexAttribPointer(colorHandler,4,GLES20.GL_FLOAT ,false,0,colorBuffer);
    
            GLES20.glDrawArrays(GLES20.GL_TRIANGLES , 0,3);
            GLES20.glDisableVertexAttribArray(positionHandler);
        }
    }
    

你可能感兴趣的:(3 绘制三角形)