OpenGL ES 绘制圆环

本文介绍了一个使用OpenGL ES实现的圆环渲染器。通过定义内环和外环的半径,利用顶点缓冲区绘制出由多个小段组成的圆环形状。该圆环被切分为多个部分进行渲染,实现了动态的视觉效果。

1、新建 MyRingRenderer.h

/*
 * 圆环
 */
public class MyRingRenderer extends MyAbstractRenderer {
	private float r_inner =0.2f; //内环 半径
	private float r_ring  =0.3f; //圆环 环半径
	
   public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
        //设置清屏色(背景)
        gl.glClearColor(0, 0, 0, 1);
        //启用顶点缓冲区
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    }
	protected void drawBefore(GL10 gl) {
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
	}
	protected void draw(GL10 gl) {
		
		int ringCount  =20;//把圆环 切成20块
		int blockCount =20;//把圆 切成20块
		
		float alpha =0;
		float beta  =0;
		float alphaStep =(float) ((2*Math.PI) /ringCount);
		float betaStep  =(float) ((2*Math.PI) /blockCount);
		
		List<Float> pos =new ArrayList<Float>();
		
		for(int i =0;i <ringCount;i++){
			//一次画两个相邻的圆
			alpha =i *alphaStep;
			for(int j =0; j <blockCount; j++){
				beta =j *betaStep;
				// z值为0的 以(0,0)点线段长度
				float lineD =(float) (r_inner +r_ring +r_ring *Math.cos(beta));
				// 投影到 x,y轴
				float x0 =(float) (Math.cos(alpha) *lineD);
				float y0 =(float) (Math.sin(alpha) *lineD);
				//由于 z轴靠近人的为正方向  +Math.PI
				float z0 =(float) (Math.sin(beta +Math.PI) *r_ring);
				
				float x1 =(float) (Math.cos(alpha +alphaStep) *lineD);
				float y1 =(float) (Math.sin(alpha +alphaStep) *lineD);
				float z1 =z0;
				
				pos.add(x0);
				pos.add(y0);
				pos.add(z0);
				pos.add(x1);
				pos.add(y1);
				pos.add(z1);
			}
		}
		ByteBuffer bb =BufferUtil.list2ByteBuffer(pos);
		gl.glVertexPointer(3, GL10.GL_FLOAT, 0, bb);
		gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, pos.size()/3);
	}
}

2、运行效果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值