在Android中绘制一条直线的顶点shader如下:

attribute vec4 vPosition;void main() {    gl_Position = vPosition;}

vPosition是顶点,由应用程序传入。

片段shader代码如下:

precision mediump float;uniform vec4 u_color;void main(){    gl_FragColor = u_color;}

u_color 是线的颜色,由应用程序传入。

创建program:

fun createProgram() {            var vertexCode =                AssetsUtils.readAssetsTxt(                    context = context,                    filePath = "glsl/line_vs.glsl"                )            var fragmentCode =                AssetsUtils.readAssetsTxt(                    context = context,                    filePath = "glsl/line_fs.glsl"                )            mProgramHandle = GLTools.createAndLinkProgram(vertexCode, fragmentCode)        }

line_vs.glsl和line_fs.glsl分别表示顶点shader和片段shader的文件,存放于assets/glsl目录下,readAssetsTxt为读取assets目录下文件的公用方法。

获取参数句柄:

vPositionLoc = GLES20.glGetAttribLocation(mProgramHandle, "vPosition")uColorLoc = GLES20.glGetUniformLocation(mProgramHandle, "u_color")

初始化线的顶点数据,代码如下:

val vertexBuffer = GLTools.array2Buffer(            floatArrayOf(                -0.5F, 0.5F, 0F,                0.5F, 0.5F, 0F,                0.5F, -0.5F, 0F,                -0.5F, -0.5F, 0F            )        )

初始化线的颜色数据,代码如下:

val colorBuffer = GLTools.array2Buffer(            floatArrayOf(                //r,g,b,a                1F, 0F, 0F, 1F            )        )

绘制:

override fun onDrawFrame(gl: GL10?) {            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)            GLES20.glUseProgram(mProgramHandle)            vertexBuffer.position(0)            GLES20.glEnableVertexAttribArray(vPositionLoc)            GLES20.glVertexAttribPointer(vPositionLoc, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer)            GLES20.glUniform4fv(uColorLoc, 1, colorBuffer)            GLES20.glDrawArrays(GLES20.GL_LINES, 0, 4)        }

设置顶点数据和颜色数据,GLES20.GL_LINES表示绘制线。

线的绘制有3种方式:

  • GL_LINES:俩俩组成一条直线,比如上面的4个点分别编号为1,2,3,4,1和2组成一条直线,3和4组成一条直线,如果点点个数为奇数,那么最后一个点将会抛弃。
  • GL_LINE_STRIP:还是上面的4个点,1和2,2和3,3和4各组成一条直线。
  • GL_LINE_LOOP:和GL_LINE_STRIP相比多了一个最后一个点和第一个点的连线。
    效果图如下:

往期推荐

  • OpenGL ES for Android 总览
  • OpenGL ES for Android 绘制纹理

更多相关文章

  1. AndroidUi(1)-直线
  2. Android(安卓)字体颜色渐变效果 Span实现
  3. android之sql例子
  4. android之sql例子
  5. android之sql例子
  6. Android实现书籍翻页效果--扩展版
  7. Android实现书籍翻页效果--扩展版(转)
  8. Android(安卓)OpenGL入门
  9. Android学习札记15:对Android中View绘制流程的一些理解

随机推荐

  1. Android:requestWindowFeature应用程序窗
  2. vlc-android编译流程
  3. android 面试
  4. android 设置程序安装位置
  5. Android(安卓)在JNI中执行Java方法--C/C+
  6. keytool-importkeypair 使用
  7. android power key 长按8s 关机
  8. ios + Android(安卓)底部拖拉菜单
  9. ActionBar(2) 标题和渐变背景设置
  10. QT5.2 Android(安卓)App中使用QML文件