Android OpenGL ES 开发教程 22 绘制一个球体

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

OpenGL ES 只能通过绘制三角形来构造几何图形,比如前面绘制的20面体Android OpenGL ES 开发教程(12):绘制一个20面体,通过增加正多面体的边数,就可以构造出一个球体:

在项目中创建一个Sphere 类,它的Draw 方法,通过绘制三角形来构造球体,并且为其添加法线,法线主要用于光照效果,将在后面介绍。

public void draw(GL10 gl) float    theta, pai; float    co, si; float    r1, r2; float    h1, h2; float    step = 2.0ffloat[][] v = new float[32][3]; ByteBuffer vbb; FloatBuffer vBuf;  vbb = ByteBuffer.allocateDirect(v.length * v[0].length * 4); vbb.order(ByteOrder.nativeOrder()); vBuf = vbb.asFloatBuffer();  gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);  for (pai = -90.0f; pai < 90.0f; pai += step) { int    n = 0;  r1 = (float)Math.cos(pai * Math.PI / 180.0); r2 = (float)Math.cos((pai + step) * Math.PI / 180.0); h1 = (float)Math.sin(pai * Math.PI / 180.0); h2 = (float)Math.sin((pai + step) * Math.PI / 180.0);  for (theta = 0.0f; theta <= 360.0f; theta += step) { co = (float)Math.cos(theta * Math.PI / 180.0); si = -(float)Math.sin(theta * Math.PI / 180.0);  v[n][0] = (r2 * co); v[n][1] = (h2); v[n][2] = (r2 * si); v[n + 1][0] = (r1 * co); v[n + 1][1] = (h1); v[n + 1][2] = (r1 * si);  vBuf.put(v[n]); vBuf.put(v[n + 1]);  n += 2;  if(n>31){ vBuf.position(0);  gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vBuf); gl.glNormalPointer(GL10.GL_FLOAT, 0, vBuf); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, n);  n = 0; theta -= step; }  } vBuf.position(0);  gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vBuf); gl.glNormalPointer(GL10.GL_FLOAT, 0, vBuf); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, n); }  gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);}

有了Sphere 类, 创建一个DrawSphere Activity来绘制球体,为了能看出3D效果,给场景中添加光源(后面介绍)


public void DrawScene(GL10 gl) super.DrawScene(gl); initScene(gl); sphere.draw(gl);}


 

本例下载

 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值