当前位置: 代码迷 >> Android >> Android上用OpenGL画的一个旋转的圆形
  详细解决方案

Android上用OpenGL画的一个旋转的圆形

热度:96   发布时间:2016-05-01 14:12:30.0
Android下用OpenGL画的一个旋转的圆形
这是我在android下用OGL ES画的第一个图形,Render的override部分引用了其它同学的一些代码
怎么上截图?

public class GLRender implements Renderer{		float rotateAngle;		//顶点数组,GL ES只能用这个办法画圆吗?	private float[] vertices = new float[720];	//度到弧度的转换    public float DegToRad(float deg)    {    	return (float) (3.14159265358979323846 * deg / 180.0);    }	    @Override    public void onDrawFrame(GL10 gl) {        // TODO Auto-generated method stub    	        // 进入这个函数第一件要做的事就是清除屏幕和深度缓存        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);        //画圆形    	drawCircle(gl);    }        public void drawCircle(GL10 gl)    {        //重置投影矩阵        gl.glLoadIdentity();        // 移动操作,移入屏幕(Z轴)5个像素, x, y , z        gl.glTranslatef(0.0f, 0.0f, -5.0f);                //旋转, angle, x, y , z        gl.glRotatef(rotateAngle, 1.0f, 0.0f, 0.0f);        // 设置当前色为红色, R, G, B, Alpha        gl.glColor4f(1.0f, 0.1f, 0.1f, 1.0f);                //设置圆形顶点数据,这个是在创建时生成    	FloatBuffer verBuffer = FloatBuffer.wrap(vertices);    	//设置顶点类型为浮点坐标(GL_FLOAT),不设置或者设置错误类型将导致图形不能显示或者显示错误    	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, verBuffer);        //打开顶点数组        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);            	//向OGL发送实际画图指令    	gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 360);    	        //关闭顶点数组功能        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);        //画图结束        gl.glFinish();                //更改旋转角度        rotateAngle += 0.5;    }        @Override    public void onSurfaceChanged(GL10 gl, int width, int height) {        // TODO Auto-generated method stub                float ratio = (float) width / height;        //设置OpenGL场景的大小        gl.glViewport(0, 0, width, height);        //设置投影矩阵        gl.glMatrixMode(GL10.GL_PROJECTION);        //重置投影矩阵        gl.glLoadIdentity();        // 设置视口的大小        gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);        // 选择模型观察矩阵        gl.glMatrixMode(GL10.GL_MODELVIEW);            // 重置模型观察矩阵        gl.glLoadIdentity();                }    @Override    public void onSurfaceCreated(GL10 gl, EGLConfig config) {        // TODO Auto-generated method stub        // 启用阴影平滑        gl.glShadeModel(GL10.GL_SMOOTH);        // 黑色背景        gl.glClearColor(0, 0, 0, 0);        // 设置深度缓存        gl.glClearDepthf(1.0f);                                    // 启用深度测试        gl.glEnable(GL10.GL_DEPTH_TEST);                                // 所作深度测试的类型        gl.glDepthFunc(GL10.GL_LEQUAL);                                            // 告诉系统对透视进行修正        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);                        //初始化圆形数据    	for (int i = 0; i < 720; i += 2) {    	    // x value    	    vertices[i]   = (float) (Math.cos(DegToRad(i)) * 1);    	    // y value    	    vertices[i+1] = (float) (Math.sin(DegToRad(i)) * 1);    	}    }}


完整程序见附件
1 楼 dyingearth 2010-12-16  
再补充一点:
上面的例子画的是实心的圆,如果想画空心的圆只要把这句:
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 360);  
改为
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 360);
即可

嘿嘿,我也是多此一举,玩GL的高手就不要笑了,这个是给刚初学GL的同学看的
2 楼 jacksonzhang 2010-12-16  
               看看
  相关解决方案