老
孟
一个
有态度
的程序员
在Android中绘制三角形的顶点shader如下:
attribute vec4 vPosition;void main() {gl_Position = vPosition;}
vPosition是顶点,由应用程序传入。
片段shader代码如下:
precision mediump float;void main(){gl_FragColor = vec4(1,0,0,1);}
创建program:
private fun createProgram() {var vertexCode =AssetsUtils.readAssetsTxt(context = context,filePath = "glsl/triangle_vertex.glsl")var fragmentCode =AssetsUtils.readAssetsTxt(context = context,filePath = "glsl/triangle_fragment.glsl")mProgramHandle = GLTools.createAndLinkProgram(vertexCode, fragmentCode)}
triangle_vertex.glsl和triangle_vertex.glsl分别表示顶点shader和片段shader的文件,存放于assets/glsl目录下,readAssetsTxt为读取assets目录下文件的公用方法。
获取参数句柄:
vPositionLoc = GLES20.glGetAttribLocation(mProgramHandle, "vPosition")
初始化线的顶点数据,代码如下:
var vertexBuffer = GLTools.array2Buffer(floatArrayOf(0.0f, 0.5f, 0.0f, // top-0.5f, -0.5f, 0.0f, // bottom left0.5f, -0.5f, 0.0f // bottom right))
绘制:
override fun onDrawFrame(p0: GL10?) {GLES20.glUseProgram(mProgramHandle)vertexBuffer.position(0)GLES20.glEnableVertexAttribArray(vPositionLoc)GLES20.glVertexAttribPointer(vPositionLoc, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer)GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3)}
GL_TRIANGLES表示绘制三角形。
三角形的绘制有3种方式:
GL_TRIANGLES:3个顶点绘制一个三角形,即使三角形的顶点有重复的,也必须在顶点数组中声明。如果有6个顶点,那么1,2,3组成一个三角形,4,5,6组成一个三角形。
GL_TRIANGLE_STRIP:前一个三角形的后两个顶点,和接下来的一个顶点组成另外一个三角形,如果有6个顶点,组成三角形的顶点有(1,2,3)、(2,3,4)、(3,4,5)、(4,5,6)共4个三角形,所以有N个顶点,则绘制出的三角形有N-2个。
GL_TRIANGLE_FAN :以第一个点为中心点,其它顶点作为边缘点绘制出组成扇型的相邻三角形,如果有6个顶点,组成三角形的顶点有(1,2,3)、(1,3,4)、(1,4,5)、(1,5,6)共4个三角形
更多相关阅读:
长
按
解
锁
关注我们
获得更多精彩内容
戳原文,查看OpenGL ES for Android 总览