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 绘制图像
-
声明片面着色器代码,顶点着色器, 以及坐标点属性(坐标点, 和每个坐标对应的颜色值 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 };
-
使用定义的函数将 shader 和 program 链接
ShaderUtils.createProgram(this.getResources() , vertexCodePath , fragmentCodePath)
-
在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); } }