OpenGL ES 画球
2015-08-11 21:17
211 查看
1、新建MyBallRenderer.java 文件
3、运行效果
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、运行效果
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories