OpenGL ES 画球

1、新建MyBallRenderer.java 文件

public class MyBallRenderer extends MyAbstractRenderer {

   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) {
		
		float r      =0.6f; //球半径
		int tiers    =12;    //总共12层
		int blocks   =32;   //一个圆分32块
		
		float tiersAnger =(float) (Math.PI / tiers);      // 一个层的角度差
		float blockAngle =(float) ((Math.PI *2) / blocks);// 一个圆每个的角度差
		
		List<Float> pos =new ArrayList<Float>();
		for(int i =0;i <tiers; i++){
			//一次画两个圆层
			float alpha0 =(float) ((-Math.PI/2) +(i *tiersAnger)) ;
			float alpha1 =(float) ((-Math.PI/2) +((i +1) *tiersAnger)) ;
			//y 值
			float y0 =(float) (Math.sin(alpha0) *r);
			float y1 =(float) (Math.sin(alpha1) *r);
			//圆半径
			float r0 =Math.abs((float) (Math.cos(alpha0) *r));
			float r1 =Math.abs((float) (Math.cos(alpha1) *r));
			
			for(int j=0;j <=blocks; j++){
				//圆坐标
				float x0 = (float) (Math.cos(j *blockAngle) *r0);
				float z0 = (float) (Math.sin(j *blockAngle) *r0);
				
				float x1 = (float) (Math.cos(j *blockAngle) *r1);
				float z1 = (float) (Math.sin(j *blockAngle) *r1);
				
				pos.add(x0);
				pos.add(y0);
				pos.add(z0);
				pos.add(x1);
				pos.add(y1);
				pos.add(z1);
			}
		}
		
		ByteBuffer pBB =BufferUtil.list2ByteBuffer(pos);
		gl.glVertexPointer(3, GL10.GL_FLOAT, 0, pBB);
		gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, pos.size()/3);
	}

} 
2、修改 MainActivity.java  onCreate方法

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		MySurfaceView view=new MySurfaceView(this);
		renderer=new MyBallRenderer();
		view.setRenderer(renderer);
		setContentView(view);
	}

3、运行效果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值