OpenGL es2.0 创建颜色线圆
2015-01-27 12:30
176 查看
一、Java代码:</span>
package com.gzdxid.utils; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.util.ArrayList; import android.opengl.GLES20; public class DrawCircleLine { int mProgram; int muMVPMatrixHandle; int maPositionHandle; int muColorRHandle; int muColorGHandle; int muColorBHandle; int muColorAHandle; FloatBuffer mVertexBuffer; int vCount = 0; float lineWidth=4; int SPAN_NUM=36; public DrawCircleLine(float radius,int mProgram) { // TODO Auto-generated constructor stub initVertex(radius); initShader(mProgram); } private void initVertex(float radius) { // TODO Auto-generated method stub float angle=360f/SPAN_NUM; ArrayList<Float>alv=new ArrayList<Float>(); for(int i=0;i<=SPAN_NUM;i++){ float x=(float) (radius*Math.cos(Math.toRadians(angle*i))); float y=(float) (radius*Math.sin(Math.toRadians(angle*i))); float z=0; alv.add(x);alv.add(y);alv.add(z); } vCount=alv.size()/3; int number=alv.size(); float vertices[]=new float[number]; for(int i=0;i<number;i++){ vertices[i]=alv.get(i); } ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); vbb.order(ByteOrder.nativeOrder()); mVertexBuffer = vbb.asFloatBuffer(); mVertexBuffer.put(vertices); mVertexBuffer.position(0); } private void initShader(int mProgram) { this.mProgram=mProgram; muMVPMatrixHandle=GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); maPositionHandle=GLES20.glGetAttribLocation(mProgram, "aPosition"); muColorRHandle=GLES20.glGetUniformLocation(mProgram, "uColorR"); muColorGHandle=GLES20.glGetUniformLocation(mProgram, "uColorG"); muColorBHandle=GLES20.glGetUniformLocation(mProgram, "uColorB"); muColorAHandle=GLES20.glGetUniformLocation(mProgram, "uColorA"); } public void drawSelf(float r,float g,float b,float a){ GLES20.glUseProgram(mProgram); GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, MatrixState.getFinalMatrix(), 0); GLES20.glUniform1f(muColorRHandle, r); GLES20.glUniform1f(muColorGHandle, g); GLES20.glUniform1f(muColorBHandle, b); GLES20.glUniform1f(muColorAHandle, a); GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false, 3*4, mVertexBuffer); GLES20.glEnableVertexAttribArray(maPositionHandle); GLES20.glLineWidth(lineWidth); GLES20.glDrawArrays(GLES20.GL_LINE_STRIP, 0, vCount); } }二、片源着色器:
precision mediump float; uniform float uColorR; uniform float uColorG; uniform float uColorB; uniform float uColorA; void main(){ vec4 finalColor; finalColor=vec4(uColorR,uColorG,uColorB,uColorA); gl_FragColor=finalColor; }三、顶多着色器:
uniform mat4 uMVPMatrix; attribute vec3 aPosition; void main(){ gl_Position=uMVPMatrix*vec4(aPosition,1); }
相关文章推荐
- openGL es2.0 创建无盖颜色圆柱
- openGL es2.0 创建灯光颜色球
- openGL es2.0 创建颜色球
- openGL es2.0 创建物理世界_颜色立方体刚体_颜色平面刚体以及四元数转换
- openGL es2.0 创建颜色平面和文理平面
- Xcode创建的默认iOS OpenGL ES 2.0 project代码分析
- Xcode创建的默认iOS OpenGL ES 2.0 project代码分析
- Xcode创建的默认iOS OpenGL ES 2.0 project代码分析
- bada开发:OpenGL ES 2.0程序 创建简单3D图形
- openGL es2.0 创建方向方体
- openGL es2.0 创建方向方体
- c语言在qt环境下调用opengl es 2.0 api创建机器人手臂
- openGL es2.0 创建可移动的纹理平面
- openGL es2.0 创建纹理灯光球
- openGL es2.0 创建纹理灯光球
- [转载]Xcode创建的默认iOS OpenGL ES 2.0 project代码分析
- openGL es2.0 创建纹理球
- [Bada开发]OpenGL ES 2.0程序 创建简单3D图形
- Xcode创建的默认iOS OpenGL ES 2.0 project代码分析
- cocos2d 2.x在opengl es 2.0 下自定义着色器来创建特别酷的特效(译)